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

2025-10-22 10:14:20

1、他主要替代了哈瑞斯的计算方法,把兰姆达计算公式,改成比大小。

在opencv里使用goodFeaturesToTrack()进行角点计算。

最后在补充一个号称亚像素级焦点函数cornerSubPix。

还是用米框图为例

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

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

2、第一步 还是引入图

转成灰度

import cv2  as cvimport  numpy as npimport copyimport osfrom matplotlib import pyplot as pltfrom skimage.measure import compare_ssimimport random

image = 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)

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

4、同时再计算一个plt模式输出图像

plt.imshow(image)

plt.show()

可以看出二者角点一致。

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

5、opencv还提供了一个号称亚像素级焦点函数

cornerSubPix

下图为官网的图示。

# 参数1是输入图像# 参数2 角点 。# 参数3亚像素角点区域NXN; N=(winSize*2+1)。# 参数4通常(-1, -1)# 参数5停止迭代条件。

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

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

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次。

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢