角点检测的基本原理就是:在角点处画一个框,当这个框无论上下左右移动时像素点变化迅速。因为在一块平滑的区域,没有什么剧烈变化,如下图所示:
目前的角点检测算法可归纳为3类:
- 基于灰度图像的角点检测;
- 基于二值图像的角点检测;
- 基于轮廓曲线的角点检测。
基本原理:
依据lambad 1,lambad 2的大小不一样,我们可以判断是否是边界,或者角点。
那是否有这样一个值来计算角点呢,而不是看两个lambad:
OpenCv中角点检测函数为cv2.cornerHarris()
其参数设置为:
img
: 数据类型为 float32 的入图像blockSize
: 角点检测中指定区域的大小ksize
: Sobel求导中使用的窗口大小,一般取3。k
: 取值参数为 [0,04,0.06]
Python实现结果如下所示:
import cv2
import numpy as np
img = cv2.imread('test_1.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[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果显示如下所示:
完整代码后台回复:https://github.com/ZhiqiangHo/Opencv-Computer-Vision-Practice-Python-
我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!