Python+OpenCV中的Shi-Tomasi角点检测实现(附代码)

1994年,J.Shi 和 C.Tomasi发表了文章《Good_Features_to_Track》,对Harris角点检测算法进行了改进。

具体原理可以参考各种文献资料,另外值得一提的是该算法适合运动物体的角点跟踪。


Opencv中的函数cv2.goodFeatureToTrack()用来进行Shi-Tomasi角点检测,其参数说明如下所示:

第一个参数:通常情况下,其输入的应是灰度图像;

第二个参数N:是想要输出的图像中N个最好的角点;

第三个参数:设置角点的质量水平,在0~1之间;代表了角点的最低的质量,小于这个质量的角点,则被剔除;

最后一个参数:设置两个角点间的最短欧式距离;也就是两个角点的像素差的平方和;

根据以上四个参数,运用此函数就能在图像上找到角点,所有低于质量水平的角点都被忽略;然后再把质量水平合格的角点按照角点质量进行降序排列;首先选取质量最高的那个角点,将其欧式距离内的角点都删掉;然后选取质量第二高的角点,重复进行;最后返回N个最佳角点;

附代码如下图所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('4.jfif') #原图为彩色图,可将第二个参数变为0,为灰度图

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray,30,0.3,5) # 返回的结果是 [[ a., b.]] 两层括号的数组。

corners = np.int0(corners)
for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),2,255,-1) #在角点处画圆,半径为2,红色,线宽默认,利于显示
plt.imshow(img),plt.show()

运行结果如下:

Shi-Tomasi角点检测,红色点为角点
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值