Harris 角点检测的打分公式为:R = λ1λ2 − k (λ1 + λ2),但 Shi-Tomasi 使用的打分函数为:R = min (λ1, λ2),如果打分超过阈值,我们就认为它是一个角点。我们可以把它绘制到 λ1 ~λ2 空间中,就会得到下图:
从这幅图中,我们可以看出来只有当 λ1 和 λ2 都大于最小值时,才被认为
是角点(绿色区域)。
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def goodFeaturesToTrack(imgae):
gray = cv.cvtColor(imgae, cv.COLOR_BGR2GRAY)
corners = cv.goodFeaturesToTrack(gray, 25, 0.01, 10) # 返回的结果是 [[ 311., 250.]] 两层括号的数组
corners = np.int0(corners)
for i in corners:
x,y = i.ravel()
cv.circle(imgae,(x,y),3,255,-1)
cv.imshow("corn", imgae)
plt.imshow(imgae),plt.show() ##绘制热图
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("C:/Users/weiqiangwen/Desktop/sest/left08.jpg")
cv.namedWindow("input contours",cv.WINDOW_AUTOSIZE)
cv.imshow("contours", src)
goodFeaturesToTrack(src)
#cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.waitKey(0)
cv.destroyAllWindows()