如何在 OpenCV Python 中實現機率霍夫變換?


機率霍夫變換是霍夫變換的一種最佳化。即使對於具有兩個引數的直線,霍夫變換也需要大量的計算。機率霍夫變換不會考慮所有點,它只考慮點的隨機子集,這對於直線檢測就足夠了。我們可以按照以下步驟在影像上實現機率霍夫變換:

  • 匯入所需的庫。在以下所有示例中,所需的 Python 庫是OpenCV。確保您已安裝它。

  • 使用cv2.imread()讀取輸入影像。使用此方法讀取的 RGB 影像為 BGR 格式。可以選擇將讀取的 BGR 影像分配給 img。

  • 現在,使用cv2.cvtColor()函式將此 BGR 影像轉換為灰度影像,如下所示。可以選擇將轉換後的灰度影像分配給 gray。

  • 對灰度影像應用閾值處理,將其轉換為二值影像。調整第二個引數 (threshValue) 以獲得更好的二值影像。

  • 使用 Canny 邊緣檢測器(您可以使用任何其他邊緣檢測器來檢測邊緣)查詢二值影像中的邊緣。

edges = cv2.Canny(gray,50,200,apertureSize = 3)
  • 使用cv2.HoughLinesP()對邊緣影像應用機率霍夫變換。它返回檢測到的直線的座標。

lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength, maxLineGap)
  • 在影像上繪製直線並顯示輸出影像。

讓我們看一些示例,以便更好地理解。

輸入影像

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


示例

在此示例中,我們找到具有以下直線屬性的影像上的機率霍夫線變換:

  • minLineLength = 10

  • maxLineGap = 5

# import required libraries import cv2 import numpy as np # read the input image img = cv2.imread('sudoku.jpg') # convert the input image to grayscale image gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # find the edges using Canny edge detector edges = cv2.Canny(gray,50,200,apertureSize = 3) minLineLength = 10 maxLineGap = 5 # apply probabilistic Hough transform lines = cv2.HoughLinesP(edges,1,np.pi/180,50,minLineLength,maxLineGap) for line in lines: for x1,y1,x2,y2 in line: cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) cv2.imshow('houghlines.jpg',img) cv2.imshow('edges', edges) cv2.waitKey(0) cv2.destroyAllWindows()

輸出

執行上述程式時,它將生成以下視窗:



第一個視窗“邊緣”顯示使用 Canny 邊緣檢測演算法檢測到的邊緣。第二個視窗“houghlines.jpg”顯示使用機率霍夫線變換檢測到的直線。

更新於: 2022年12月2日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.