python-opencv学习记录--harris角点检测

harris角点检测

概念

  • 在水平与垂直方向移动,像素变化均不大,则为平面
  • 在水平与垂直方向移动,其中一个方向像素变化较大,则为边界
  • 在水平与垂直方向移动,其中两个方向像素变化均较大,则为角点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o4AbV76Q-1611483408010)(E:\写作\markdown\深度学习\资料\资料\11-12章notebook课件\图像特征\harris_1.png)]

基本原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

角点响应

在这里插入图片描述

通常情况下,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()

效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45619006/article/details/113094501