角点检测
#!/user/bin/ env python
# -*- coding:utf-8 -*-
# Author: 
import cv2
import numpy as np

img = cv2.imread('./chess_board.png')
#img = cv2.imread('./mei.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,23,0.04)
'''这段代码,使用常用的方法加载棋盘图像,为了使得cornerHarris函数可以计算,需要将棋盘图像转化为灰度格式,
然后调用cornerHarris函数.
这里最重要的是第三个参数,该参数限定了Sobel算子的中孔(aperture)
Sobel算子通过对图像行、列的变化检测来检测边缘,Sobel算子会通过核来完成检测
简单的来说,该参数定义了角点检测的敏感度,其取值必须是介于3-31之间的奇数
'''




img[dst>0.01 *dst.max()] = [0,0,255]
'''
这行代码会将检测到的角点标记为红色,调整cornerHarris的第二个参数可以改变这种情况
即参数值越小,标记角点记号越小
'''
while(True):
    cv2.imshow('corners',img)
    if cv2.waitKey(100//12) & 0xff == ord("q"):
        '''
        在进行测试例子的时候,总是出现TypeError

        主要原因是因为cv2.resize内的参数是要求为整数

        而python3中的
        '/'(除法),最后的结果自动转为浮点数

        所以使用
        '//'
        运算,最后成功'''
        break
cv2.waitKey()
cv2.destroyAllWindows()
 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐