Shi-Tomasi 角點檢測和追蹤的良好特徵
Shi-Tomasi 角落探測器,使用到函式:cv.goodFeaturesToTrack()
它透過 Shi-Tomasi 方法(或 Harris 角點檢測,如果你指定它)在影像中找到 N 個最佳的角點。像往常一樣,影像應該是灰度影像。然後指定要查詢的角點數量。然後指定質量等級,該等級是 0-1 之間的值,所有低於這個質量等級的角點都將被忽略。最後設定檢測到的兩個角點之間的最小歐氏距離。
該函式選定質量等級最高的角點(即排序後的第一個角點),忽略該角點最小距離範圍內的其餘角點,以此類推最後返回 N 個最佳的角點。
1 import numpy as np 2 import cv2 as cv 3 from matplotlib import pyplot as plt 4 5 img = cv.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\9.png') 6 gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) 7 corners = cv.goodFeaturesToTrack(gray, 25, 0.01, 10) 8 corners = np.int0(corners) 9 for i in corners: 10 x, y = i.ravel() 11 cv.circle(img, (x, y), 3, 255, -1) 12 plt.imshow(img), plt.show()
OpenCV 中的 FAST 特徵點檢測器
它可以像 OpenCV 中的任何其他特徵點檢測器一樣呼叫。如果需要,您可以指定閾值,是否應用非最大值抑制,要使用的鄰域等。
對於鄰域,定義了三個標誌,cv.FAST_FEATURE_DETECTOR_TYPE_5_8,cv.FAST_FEATURE_DETECTOR_TYPE_7_12 和 cv.FAST_FEATURE_DETECTOR_TYPE_9_16。
1 import numpy as np 2 import cv2 as cv 3 from matplotlib import pyplot as plt 4 5 img = cv.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\9.png', 0) 6 # Initiate FAST object with default values 7 fast = cv.FastFeatureDetector_create() 8 # find and draw the keypoints 9 kp = fast.detect(img, None) 10 img2 = cv.drawKeypoints(img, kp, None, color=(255, 0, 0)) 11 # Print all default params 12 print("Threshold: {}".format(fast.getThreshold())) 13 print("nonmaxSuppression:{}".format(fast.getNonmaxSuppression())) 14 print("neighborhood: {}".format(fast.getType())) 15 print("Total Keypoints with nonmaxSuppression: {}".format(len(kp))) 16 cv.imwrite('fast_true.png', img2) 17 # Disable nonmaxSuppression 18 fast.setNonmaxSuppression(0) 19 kp = fast.detect(img, None) 20 print("Total Keypoints without nonmaxSuppression: {}".format(len(kp))) 21 img3 = cv.drawKeypoints(img, kp, None, color=(255, 0, 0)) 22 cv.imwrite(r'C:\Users\19225\PycharmProjects\test\src\user\static\2.jpg', img3) 23 cv.imshow('fast_false.png', img3) 24 cv.imshow('fast_true.png', img2) 25 cv.waitKey(0)