使用 Python OpenCV 中的 Harris 角點檢測器檢測角點


在 OpenCV 中,Harris 角點檢測器使用函式cv2.cornerHarris()實現。它接受四個引數:img、blockSize、ksize和 k。其中 img 是灰度輸入影像,資料型別為 float32,blockSize是用於角點檢測的鄰域大小,ksize是所用 Sobel 導數的孔徑引數,k 是公式中的 Harris 檢測器自由引數。

步驟

要使用 Harris 角點檢測器在影像中檢測角點,您可以按照以下步驟操作

  • 匯入所需的庫OpenCVNumPy。確保您已安裝它們。

  • 使用cv2.imread()方法讀取輸入影像。指定影像的完整路徑。使用cv2.cvtColor()方法將輸入影像轉換為灰度影像。將灰度影像的資料型別轉換為np.float32

  • 在灰度影像(float32)上應用cv2.cornerHarris()方法。將合適的blockSizeksize和 k 作為引數傳遞給該方法。

  • 膨脹結果以標記角點,並對最佳值應用閾值。

  • 顯示檢測到角點的影像。

讓我們看看使用 Harris 角點檢測器在影像中檢測角點的示例。

輸入影像

我們在下面的示例中使用此影像作為輸入檔案。


示例

此程式演示如何使用 Harris 角點檢測器演算法在影像中檢測角點 -

# import required libraries import cv2 import numpy as np # load the input image img = cv2.imread('sudoku.jpg') # convert the input image into grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # modify the data type setting to 32-bit floating point gray = np.float32(gray) # apply the cv2.cornerHarris method to detect the corners corners = cv2.cornerHarris(gray, 2, 3, 0.05) #result is dilated for marking the corners corners = cv2.dilate(corners, None) # Threshold for an optimal value. img[corners > 0.01 * corners.max()]=[0, 0, 255] # the window showing output image with corners cv2.imshow('Image with Corners', img) cv2.waitKey(0) cv2.destroyAllWindows()

輸出

當我們執行以上程式碼時,它將生成以下輸出視窗 -


以上輸出影像顯示了使用 Harris 角點檢測器檢測到的角點。角點以紅色顯示。

更新於: 2022年12月2日

3K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告