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)

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

结果展示

相关推荐
冬奇Lab3 分钟前
每日一个开源项目 #110:ai-engineering-from-scratch - 从零构建 AI 工程全栈能力
人工智能·深度学习·llm
夜郎king3 分钟前
基于 Trae Solo 的 Ant 遗留项目编译方案 —— 以 BaseformEpanet 为例
人工智能·trae solo·水力模型·java水力模型编译
测试员周周6 分钟前
【Appium 系列】第20节-测试项目结构设计 — 从脚本到工程
人工智能·数据挖掘·回归·单元测试·appium·测试用例·测试覆盖率
还是叫明9 分钟前
C#使用YOLO26进行图像识别(目标检测)
opencv·yolo·目标检测·c#
IT_陈寒10 分钟前
SpringBoot自动配置偷偷给我埋了个坑
前端·人工智能·后端
一切皆是因缘际会11 分钟前
AI 从 “模仿智能” 到 “重构世界” 的范式跃迁
大数据·人工智能·深度学习·重构·架构
Are_You_Okkk_13 分钟前
无需配环境、不受设备限!MonkeyCode重新定义研发
大数据·人工智能·开源·团队开发·ai编程
kyraaa114 分钟前
618智能灭蚊器什么牌子好?电灭蚊灯哪个牌子好用?综合测评希亦、绳池等10大热门灭蚊灯品牌!
大数据·人工智能·python
deephub14 分钟前
推理 → 行动 → 观察:用 LangChain + Python 实现一个智能体循环
人工智能·python·langchain·大语言模型·agent
生成论实验室17 分钟前
Token即事件:Transformer为何是“事件-关系网络”的最佳实现——兼论大语言模型如何从“概率鹦鹉”进化为“认知主体”
人工智能·深度学习·语言模型·agi·安全架构