目录
角点
角点:沿水平和竖直方向滑动,灰度变化都很明显的区域。
基本原理
如同下图所示,一个是平坦区域,一个是边缘。一个是角点,设置一个滑动窗口,无论朝那个方向移动,对应位置上的亮度都会有很大变化,
R值:趋近于0,说明是平面区域
小于0,是边界
大于0,是角点
α的值增大,R值减小,降低角点检测的灵敏性,减少被检测角点的数量;
α值减小,R值增大,增加角点检测的灵敏性,增加被检测角点的数量。
角点检测
cv2.cornerHarris()
- img:数据类型为float32的入图像
- blockSize:角点检测中指定区域的大小
- ksize:Sobel求导中使用的窗口大小,一般为3
- k:取值参数为【0.04,0.06】,默认0.04
完整代码
import cv2
import numpy as np
img=cv2.imread('E:/OpenCV/image/1.png')
print('img.shape:',img.shape)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#gray=np.float32(gray)
dst=cv2.cornerHarris(gray,2,3,0.04)#某个位置的自相似程度(变化程度)
print('dst.shape:',dst.shape)
img[dst>0.01*dst.max()]=[0,0,255]#不设固定值,一般与最大值相比,最大值肯定是角点,若大于此值,则认为该位置是角点,画出它,用红色画出
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destoryAllWindows()