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

角点检测之Shi-Tomasi方法(python下opencv)

在焦点检测的世界里哈瑞斯无疑是最重要的方法之一,但Shi-Tomasi作为改进的算法也有很大应用场景,尤其是动态跟踪用的还比较多。
工具/原料
1

pycharm+windows7

2

opencv3 python3

方法/步骤
1

他主要替代了哈瑞斯的计算方法,把兰姆达计算公式,改成比大小。在opencv里使用goodFeaturesToTrack()进行角点计算。最后在补充一个号称亚像素级焦点函数cornerSubPix。还是用米框图为例

2

第一步 还是引入图转成灰度import cv2  as cvimport  numpy as npimport copyimport osfrom matplotlib import pyplot as pltfrom skimage.measure import compare_ssimimport randomimage = cv.imread('c:\\color_MiLine.png')gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)生成灰度图像

3

使用goodFeaturesToTrack计算角点corners = cv.goodFeaturesToTrack(gray,5,0.1,10)参数5 表示选5个最好的角点 0.1 代表角点的质量水平,在0~1之间10 代表两个角点间的最短欧式距离corners0 = np.int0(corners)for corner in corners0:    row, col = corner.ravel()    # cv.circle(image,(x,y),3,255,-1)    cv.circle(image, (row, col), 5, (255,255,0), 1)浅蓝色的就是计算的角点cv.imshow('image', image)cv.waitKey(0)

4

同时再计算一个plt模式输出图像plt.imshow(image)plt.show()可以看出二者角点一致。

5

opencv还提供了一个号称亚像素级焦点函数cornerSubPix下图为官网的图示。# 参数1是输入图像# 参数2 角点 。# 参数3亚像素角点区域NXN; N=(winSize*2+1)。# 参数4通常(-1, -1)# 参数5停止迭代条件。

6

criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 20, 0.001)cornerSubPix = cv.cornerSubPix(gray,corners,(5,5),(-1,-1),criteria)cornerSubPixs = np.int0(cornerSubPix)for corner in cornerSubPixs:    row, col = corner.ravel()    # cv.circle(image,(x,y),3,255,-1)    cv.circle(image, (row, col), 5, (255,255,0), 1)plt.imshow(image)plt.show()cv.imshow('cornerSubPix', image)cv.waitKey(0)每个角点基本被选中2次。

注意事项
1

goodFeaturesToTrack()用于计算shi-tomas角点 注意参数选择

2

cornerSubPix用于sub角点选择,更精细一些

推荐信息