图片里的角点在哪里?用华为云码道开发 OpenCV Harris 角点检测工具

前面已经做过 Sobel 梯度、边缘方向和纹理分析,这次继续往"特征点"方向走一步。

这次我用华为云码道辅助开发了一个:

OpenCV Harris 角点检测工具。

它可以自动寻找图片中灰度变化明显、两个方向都具有较强变化的位置,并把这些位置作为角点标记出来。


1. 这次工具做什么?

主要功能包括:

  • 上传 JPG / PNG 图片
  • 自动转换灰度图
  • 使用 Harris Corner Detection
  • 调节 Block Size
  • 调节 Kernel Size
  • 调节 Harris K
  • 调节 Threshold Ratio
  • 在图片上标记角点
  • 统计 Corner Count
  • 支持下载检测结果

整体流程:

图片

→ 灰度化

→ Harris Response

→ 阈值筛选

→ 聚合相邻候选点

→ 输出角点


2. 什么是 Harris Corner?

Harris Corner Detection 是一个经典角点检测算法。

它主要寻找这种位置:

无论向哪个方向移动,局部灰度都会发生明显变化。

比如:

直线内部通常只在一个方向变化明显。

平坦区域基本没有变化。

而真正的角点,在多个方向上都会出现明显变化。

所以像:

建筑拐角

眼睛边缘

鼻子轮廓

纹理交叉位置

都比较容易产生较强 Harris Response。


3. 核心代码怎么实现?

先转成灰度图:

复制代码
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)gray = np.float32(gray)

然后调用:

复制代码
response = cv2.cornerHarris(    gray,    blockSize=2,    ksize=3,    k=0.04)

这次实际参数:

  • Block Size:2
  • Kernel Size:3
  • Harris K:0.04

得到的 response 就是每个位置对应的 Harris 响应强度。


4. Threshold Ratio 是怎么用的?

并不是所有响应都算角点。

这次使用:

Threshold Ratio = 0.010

先找到最大响应:

Maximum Response = 6.1586 × 10⁷

然后计算阈值:

复制代码
Threshold
= Maximum Response × Threshold Ratio
= 6.1586e7 × 0.01
= 6.1586e5

所以最终:

Threshold Value = 6.1586 × 10⁵

只有响应强度超过这个值的位置,才进入角点候选区域。


5. 为什么不能直接统计所有红色像素?

如果直接写:

复制代码
mask = response > thresholdcorner_count = np.count_nonzero(mask)

会有一个问题:

同一个真实角点周围,可能连续很多像素都超过阈值。

这样一个角点就可能被统计成几十个甚至上百个点。

所以这次工具没有直接统计所有响应像素,而是:

把相邻候选区域聚合,再保留一个代表角点。

这样最终得到的 Corner Count 更合理。


6. 真实测试结果

这次继续使用狗狗公园图片。

图片尺寸:

1650 × 953

最终得到:

  • Corner Count:605
  • Maximum Response:6.1586 × 10⁷
  • Threshold Value:6.1586 × 10⁵
  • Block Size:2
  • Kernel Size:3
  • Harris K:0.04
  • Threshold Ratio:0.010

最终一共检测到:

605 个角点区域。


7. 角点主要出现在哪里?

从检测结果可以看到,红色角点主要集中在:

狗狗眼睛

鼻子

嘴巴

耳朵和毛发边缘

草地

树叶

建筑结构

这些位置都有一个共同特点:

局部结构变化比较明显。

而:

天空

湖面

大面积平滑区域

基本不会出现大量角点。

这和 Harris 的检测逻辑是一致的。


8. Block Size、Kernel Size、K 分别是什么?

Block Size

决定计算局部结构时参考多大的邻域。

这次:

2

Kernel Size

是 Sobel 梯度计算使用的窗口大小。

这次:

3

Harris K

是 Harris 响应公式中的经验参数。

常见值通常在:

0.04~0.06

这次使用:

0.04

这些参数都会影响最终角点数量和灵敏度。


9. Threshold Ratio 为什么很重要?

Threshold Ratio 越低:

检测会更敏感。

角点数量通常更多,但也更容易产生弱响应点。

Threshold Ratio 越高:

只保留更强的角点。

数量会减少,但结果更加严格。

这次使用:

0.010

最终检测出:

605 个角点

说明当前图片本身纹理和结构比较丰富。


10. 总结

这次用华为云码道辅助开发了一个:

OpenCV Harris 角点检测工具。

核心流程:

Grayscale

→ Harris Response

→ Threshold

→ Connected Region

→ Corner Marker

真实测试结果:

  • Corner Count:605
  • Maximum Response:6.1586 × 10⁷
  • Threshold Value:6.1586 × 10⁵
  • Block Size:2
  • Kernel Size:3
  • Harris K:0.04
  • Threshold Ratio:0.010

最终可以看到,角点主要集中在狗狗脸部、毛发、草地、树叶和建筑等结构变化明显的位置。

这一篇相比前面的边缘分析又进一步:

边缘告诉我们"哪里发生了变化",角点则告诉我们"哪里结构更有辨识度"。

下一篇可以继续做:

图片里的关键点怎么找?用华为云码道开发 OpenCV FAST 特征点检测工具

这样可以从 Harris 继续过渡到更实际的 Keypoint Detection。

相关推荐
leizhen198408091 小时前
Vibe Coding:门槛降了,但判断力成了新的门槛(漫画)
人工智能·安全
for_ever_love__1 小时前
Agentic RAG 实战:让 Agent 自己决定怎么检索、检索几次
人工智能·后端·agent·控制·自适应·rag·检索策略
微三云 - 廖会灵 (私域系统开发)1 小时前
从 0 到 1 跑通一个社区平台:消费返物业费模型的产品设计与落地复盘
大数据·人工智能
深圳多奥智能一卡(码、脸)通系统1 小时前
对电动两轮车、三轮车及电池禁止入户入梯的管控及出入口管理怎么搞?
人工智能·电动车·门禁·梯控·门禁一卡通·梯控一卡通·智能一卡通
深圳昊客网络科技1 小时前
1688店铺有流量没订单?问题可能出在详情页结构
人工智能·产品运营
AloraAI-支出审核智能体1 小时前
AI 支出审核智能体是什么:三类场景与三层能力架构
人工智能
老王爱玩车1 小时前
你对AI 的回答满意吗?
人工智能
什么嘻嘻果冻2 小时前
零代码建站开户的适用场景,恐象 AI 能建哪些网站
大数据·人工智能
RobinDevNotes2 小时前
SGLang 上手:重复的前缀只算一次
人工智能·python·深度学习·sglang·c4python