OpenCV Python – 如何使用SIFT檢測和繪製圖像中的關鍵點?
SIFT(尺度不變特徵變換)是一種尺度不變特徵描述符。它檢測影像中的關鍵點並計算其描述符。我們首先使用cv2.SIFT_create()建立一個SIFT物件。然後使用sift.detect()檢測關鍵點,其中sift是建立的SIFT物件。要繪製關鍵點,我們使用cv2.drawKeypoints()。
步驟
要使用SIFT演算法檢測和繪製輸入影像中的關鍵點,您可以按照以下步驟操作
匯入所需的庫OpenCV和NumPy。確保您已安裝它們。
使用cv2.imread()方法讀取輸入影像。指定影像的完整路徑。使用cv2.cvtColor()方法將輸入影像轉換為灰度影像。
使用sift=cv2.SIFT_create()初始化具有預設值的SIFT物件。
檢測灰度影像中的關鍵點。使用sift.detect()。它返回關鍵點kp。
在影像cv2.drawKeypoints()函式上繪製檢測到的關鍵點kp。要繪製豐富的關鍵點,您可以將flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS作為引數傳遞。
顯示帶有繪製的關鍵點的影像
讓我們看看使用SIFT演算法檢測和繪製輸入影像中的關鍵點的示例。
輸入影像
在下面的示例中,我們將使用以下影像作為輸入檔案。
示例
在此程式中,我們使用SIFT演算法檢測和繪製輸入影像中的關鍵點。
# import required libraries import cv2 # read input image img = cv2.imread('architecture2.jpg') # convert the image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Initiate SIFT object with default values sift = cv2.SIFT_create() # find the keypoints on image (grayscale) kp = sift.detect(gray,None) # draw keypoints in image img2 = cv2.drawKeypoints(gray, kp, None, flags=0) # display the image with keypoints drawn on it cv2.imshow("Keypoints", img2) cv2.waitKey(0) cv2.destroyAllWindows()
執行上述程式碼後,它將開啟以下輸出視窗,顯示帶有繪製的關鍵點的影像。
請注意,關鍵點以不同的顏色繪製。您可以將顏色(例如,對於紅色(0,0,255))作為引數傳遞給drawKeypoints()函式,以使用單一顏色繪製關鍵點。
示例
在此示例中,我們將瞭解如何使用SIFT演算法檢測和繪製輸入影像中的關鍵點。
我們將flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS作為引數傳遞給cv2.drawKeypoints()。
# import required libraries import cv2 # read input image img = cv2.imread('architecture2.jpg') # convert the image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Initiate SIFT object with default values sift = cv2.SIFT_create() # find the keypoints on image (grayscale) kp = sift.detect(gray,None) # draw keypoints in image img2=cv2.drawKeypoints(gray,kp,None,flags=cv2.DRAW_MATCHES_FLAG S_DRAW_RICH_KEYPOINTS) # display the image with keypoints drawn on it cv2.imshow("Keypoints", img2) cv2.waitKey(0) cv2.destroyAllWindows()
輸出
執行上述程式碼後,它將開啟以下輸出視窗,顯示帶有繪製的關鍵點的影像。
請注意,關鍵點以不同的尺寸甚至方向繪製。