如何在 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”顯示使用機率霍夫線變換檢測到的直線。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP