目录
引入
我们想要获取图片上的角点,就要用到我们的harris角点检测
介绍
①使用的主要函数介绍
cv2.cornerHarris()
- img: 数据类型为 float32 的入图像
不是float32的数据要使用,np.float32()转换为float32
- blockSize: 角点检测中指定区域的大小
指定检测框的区域大小
- ksize: Sobel求导中使用的窗口大小 一般设置为3即可,即表示为3x3大小的
Sobel求导中使用的窗口大小就是使用sobel算子进行边缘检测那个,是这样的:
sobel算子 x 原始图像 = 边缘图像
- k:判断时候的比例系数 设为 0.04~0.06都可以
②实际例子解释
我们对如下图片进行角点检测
代码:
python
import cv2
import numpy as np
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
可能疑惑点解释:
img[dst>0.01*dst.max()]=[0,0,255]
整体过程(主要在于自相似性):
dst为我们计算完的所有点,将它和dst里面最大值的0.01倍进行比较(因为最大值肯定是个角点[自相似性]),
如果大于了表明可能是个角点,我们把它的颜色设置为[0,0,255]红色画出来
结果
③自相似性是什么?
自相似性公式:
总体来说就是判断差异大不大,和边界检测有点类似:
I(u,v) - I(u + x, v + y) 的差值大的话,那他就是个角点