opencv特征检测

一 harris角点检测

基本思想

使用一个固定的小窗口在图像上进行任意方向的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化(sobel算子),那么我们可以认为该窗口中存在角点。

如图中有一个框框,如果他的上下左右像素值都发生了变化,那么就把这个点看作角点。

具体代码

复制代码
# ========== Harris角点检测 ==========
# 读取图像
img = cv2.imread('img.png')
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Harris角点检测
# blockSize: 角点检测中要考虑的邻域大小
# ksize: Sobel求导中使用的窗口大小
# k: Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]
dst = cv2.cornerHarris(gray, blockSize=4, ksize=3, k=0.04)

# 标记检测到的角点
# 通过对角点响应进行阈值处理,标记出检测到的角点
# 0.05 * dst.max() 是一个阈值,大于这个值的像素点会被标记为红色
img[dst > 0.05 * dst.max()] = [0, 0, 255]

# 显示结果
cv2.imshow('Harris Corner Detection', img)
cv2.waitKey(0)

效果展示

特征检测:sift特征检测

SIFT(Scale Invariant Feature Transform)尺度不变特征变换。SIFT特征具有对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。(这个算法是特征检测中最重要的方法)

特点

1、图像的局部特征,对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、噪声也保持一定程度的稳定性。

2、独特性好,信息量丰富,适用于海量特征库进行快速、准确的匹配。

3、多量性,即使是很少几个物体也可以产生大量的SIFT特征

4、高速性,经优化的SIFT匹配算法甚至可以达到实时性

5、扩招性,可以很方便的与其他的特征向量进行联合。

具体代码

复制代码
# ========== SIFT特征提取 ==========
# 读取另一张图像
man = cv2.imread('img.png')
man_gray = cv2.cvtColor(man, cv2.COLOR_BGR2GRAY)

# 创建SIFT特征提取对象
sift = cv2.SIFT_create()

# 在图像中查找关键点
kp = sift.detect(man_gray, None)

# 绘制关键点
# flags参数说明:
# cv2.DRAW_MATCHES_FLAGS_DEFAULT - 默认方式
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS - 绘制富有信息的关键点
man_sift = cv2.drawKeypoints(man, kp, outImage=None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# 显示结果
cv2.imshow('SIFT Keypoints', man_sift)
cv2.waitKey(0)

# 计算关键点描述符
kp, des = sift.compute(man_gray, kp)

# 输出关键点的形状和描述符的形状
print("关键点形状:", np.array(kp).shape)
print("描述符形状:", des.shape)

# 关键点属性说明:
# kp.pt: 关键点的(x, y)坐标
# kp.size: 关键点的大小(尺度)
# kp.angle: 关键点的方向
# kp.response: 关键点的响应值
# kp.octave: 关键点所在的金字塔层级

其中

复制代码
kp = sift.detect(man_gray, None)

检测完返回了所有的信息然后就可以画了。

结果展示

相关推荐
罗西的思考2 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab3 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab3 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
格砸4 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云5 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny8655 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔5 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能
smallyoung5 小时前
AgenticRAG:智能体驱动的检索增强生成
人工智能
_skyming_5 小时前
OpenCode 如何做到结果不做自动质量评估,为什么结果还不错?
人工智能
南山安6 小时前
手写 Cursor 核心原理:从 Node.js 进程到智能 Agent
人工智能·agent·设计