harris角点检测
概念
- 在水平与垂直方向移动,像素变化均不大,则为平面
- 在水平与垂直方向移动,其中一个方向像素变化较大,则为边界
- 在水平与垂直方向移动,其中两个方向像素变化均较大,则为角点
基本原理
角点响应
通常情况下,R>0,认为是角点,R=0,认为平坦区域,R<0,认为是边界
代码案例
cv2.cornerHarris()
- img: 数据类型为 float32 的入图像
- blockSize: 角点检测中指定区域的大小
- ksize: Sobel求导中使用的窗口大小
- k: 取值参数为 [0,04,0.06]
import cv2
import numpy as np
img = cv2.imread('chessboard.jpg')
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.shape: (512, 512, 3)
#dst.shape: (512, 512)
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destroyAllWindows()