2017-07-17 99 views
0

我想從下面的圖像的線條: originalOpenCV的霍夫線不顯示

我的代碼使用以下功能:

import cv2 
lines = cv2.HoughLinesP(image, .1, np.pi/360, 10, 
         minLineLength, maxLineGap) 

其中minLineLength = 20,和maxLineGap = 10。我正在獲取以下內容: after hough lines

爲什麼在這種情況下水平線不顯示,儘管清晰可見他肉眼?

+0

我不確定,但在原始圖像中,我看不到任何線條「清晰可見」...您的意思是沒有閾值的圖像?我相信你上傳了錯誤的圖片,請編輯,以便我們可以幫助更好。這可能是因爲他們沒有你指定的'minLineLength',也許值越低,它們就會檢測到它們。 – DarkCygnus

+0

這是正確的圖像。不應該將矩形的上邊緣註冊爲水平線? – ajf1000

+1

像素中rho的分辨率太小。嘗試1而不是0.1。如果數值較小,則風險是您無法在累加器的任何倉中累積足夠的像素以達到您在10處設置的閾值。對於像您這樣的圖像,使用此0.1值沒有意義。 – Eskapp

回答

1

問題是你用於rho的分辨率。

0.1的分辨率非常小。事實上,對於尺寸爲(N, N)像素的圖像,rho的可能值的數量爲N * N * sqrt(2)/rho_resolution(有時是取決於如何定義角度的兩倍)。

可能值的數量在Hough累加器中物化爲箱。此數字越大,圖像的不同像素積聚的區域就越小。由於rho的分辨率非常小,因此最終會得到一個稀疏的累加器,在這裏和那裏有一些較低的值。

將此值提高到1或2像素的分辨率,您應該看到更多重要線條出現。

0

如果HoughLinesP()不是檢測到某一行,即使它清晰可見,也是因爲該行肯定不符合您的某些條件。最有可能的是你的minLineLengthmaxLineGap。如果您減少這些標準,您將開始檢測更多線條。

另外,如某些註釋所示,您的rho參數可能太小(0.1)。作爲該參數在像素測量,給它一個非整數值可能會產生意想不到的效果,嘗試給它的1

的值。如果你願意,你可以看看這個example從文檔,他們解釋並展示如何使用HoughLines()HoughLinesP()