本文以下OpenCV都简写成"cv2"的形式,所有img都默认为一张图片
关联文章:
OpenCV和图像处理(一)
十、特征提取和特征匹配
首先了解一个概念:角点。抽象的说,角点就是极值点,即在某方面属性特别突出的点。在图像特征提取中,角点可以是两条线的交叉处,也可以是位于相邻的两个主要方向不同的事物上的点。
1、特征提取
特征提取指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。特征的好坏对泛化性能有至关重要的影响。
1-1:Harris角点检测
该算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。具体推导我就不写了,但是结论公式我还是有必要摆一下:
R = d e t ( M ) − k ( t r a c e ( M ) ) 2 , R 越 大 越 有 可 能 是 角 点 R=det(M)-k(trace(M))^2,R越大越有可能是角点 R=det(M)−k(trace(M))2,R越大越有可能是角点
代码如下:
img = cv2.imread("1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray) # 拿到图,转成灰度图,再将int变成float32的类型
dst = cv2.cornerHarris(gray, 2, 3, 0.04)