多语言展示
当前在线:323今日阅读:176今日分享:34

python环境opencv实现Harris角点检测

Harris角点在焦点监测,图像匹配 图像融合有较多应用,是后续一些算法的基础,原理也是和灰度图片在阶跃和屋顶变化率大的地方就是角点位置。
工具/原料
1

pycharm+ win7

2

opencv3+python3

方法/步骤
1

cornerHarris是角点判断的关键函数。# cv.cornerHarris(src, blockSize, ksize, k, dst=None, borderType=None)# src:数据类型为 float32 图像# blockSize:角点检测区域大小# ksize:Sobel求导中使用的窗口大小# k:一般取[0.04 0.06]# dst:输出图像# borderType:边界的类型import cv2  as cvimport  numpy as npimport copyimport osfrom matplotlib import pyplot as pltfrom skimage.measure import compare_ssimimport randomimage = cv.imread('c:\\meiping1.png')cv.imshow('image',image)先引入梅瓶图

2

角点的几个特点:角点是根据窗口(或者核)在移动过程中如果窗口内灰度值变化很大说明遇到角点。如果水平或垂直的方向变动 都不会对窗口内灰度值有大的影响,说明是内部区域Harris角点检测的结果是灰度图,通过对为角点值的打分进行。

3

转化为灰度并且转成浮点数,不转成浮点求导就可能有问题gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)cv.imshow('gray',gray)通过np转为浮点数! 重要!gray = np.float32(gray)

4

cornerHarris的最后一个参数选0.04 到 0.05 之间cornerHarris = cv.cornerHarris(gray,2,3,0.041)cv.imshow('cornerHarris',cornerHarris)我们可以观察貌似监测到的很多# src:输入图像# blockSize:角点检测区域大小# ksize:窗口大小# k:参数为 [0.04 0.06]# dst:输出图像# borderType:边界类型

5

根据形态学理论 进行膨胀一下,让图变胖dilate = cv.dilate(cornerHarris,None)cv.imshow('dilate',dilate)# dilate参数:# src:原图。# dst:目标。# element:腐蚀操作的内核。 默认3x3 矩阵。可用getStructuringElement().# anchor:默认为Point(-1,-1),内核中心点。省略时为默认值。# iterations:腐蚀次数。省略时为默认值1。# borderType:推断边缘类型,默认为BORDER_DEFAULT,省略时为默认值。# borderValue:边缘值

6

通过dilate>0.1*dilate.max()去寻找角点,找出角点特征最明显的然后变蓝色标识角点image[dilate>0.1*dilate.max()]=[255,0,0]# cv.threshold(cornerHarris, cornerHarris, 0.001, 255, cv.THRESH_BINARY)cv.imshow('cornerHarris_result1',image)# cv.imshow('cornerHarris_result2',cornerHarris)cv.waitKey(0)cv.destroyAllWindows()

7

通过对焦点的检测,为后续轮廓处理打下基础。

注意事项
1

先检测 再膨胀,最后找出接近最大值的10%复合角点特征的画点 标识。

2

通过膨胀操作后的dilate>0.1*dilate.max()去寻找角点,找出角点特征最明显的。

推荐信息