https://blog.csdn.net/Keep_Trying_Go/article/details/125384144
Shi-Tomasi是對Harris角點檢測的改進;
由於Harris角點檢測算法的穩定性和K系數有關,而K是一個經驗值,所以不好設定其K的最佳值。
goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance, corners=None, mask=None, blockSize=None, useHarrisDetector=None, k=None)
:Image:輸入的原始圖像
;maxCorners:角點的最大數,值為0表示無限制
;qualityLevel:角點的質量;小於的1.0的正數,一般在0.01-0.1之間;表示可接受角點的最低質量水平。該系數乘以最好的角點分數(也就是上面較小的那個特征值),作為可接受的最小分數;例如,如果最好的角點分數值為1500且質量系數為0.01,那麼所有質量分數小於15的角都將被忽略
。minDistance:角之間最小歐式距離,忽略小於此距離的點
。Corners:輸出檢測角點的一個向量值
;Mask:感興趣的區域
;blockSize:檢測窗口的大小
;userHarrisDetector:是否使用Harris算法,默認值為false,不使用Harris算法
;K:默認值為0.04
;
import os
import cv2
import numpy as np
#讀取圖片
img=cv2.imread('images/HaLiSi.jpg')
#縮放圖片
img=cv2.resize(src=img,dsize=(450,450))
#轉灰度圖
gray=cv2.cvtColor(src=img,code=cv2.COLOR_RGB2GRAY)
tomasiCorners=cv2.goodFeaturesToTrack(image=gray,maxCorners=1000,qualityLevel=0.01,minDistance=10)
#轉換為整形
tomasiCorners=np.int0(tomasiCorners)
#遍歷所有的角點
for corner in tomasiCorners:
#獲取角點的坐標
x,y=corner.ravel()
cv2.circle(img=img,center=(x,y),radius=3,color=(0,255,0),thickness=-1)
#顯示圖像
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')