2016-03-17 59 views
2

我有一個關於HoughLines的opencv庫的問題。以下格式是從官方網站:Opencv HoughLines Lines Theta?

C++:空隙HoughLines(InputArray圖像,OutputArray線,雙RHO,雙THETA,INT閾值時,雙SRN = 0,雙STN = 0)

而說明輸出數組參數的行,它說:

lines - 輸出行的向量。每一行都由一個二元向量表示:rho和theta。垂直線的θ值爲0,水平線的值爲π/ 2(輻射值)。

我想知道theta的原則是什麼?似乎θ在0〜1.57的範圍內(因爲pi/2是1.57),但是我運行代碼並發現theta可以超過1.57並變成一些奇怪的值,如下圖所示,紅線是檢測到的通過HoughLines行,和sita是參數行中的值? enter image description here

任何人都可以告訴我什麼是線的輸出的規律性?

非常感謝!

+0

角度似乎是正確的,從X軸逆時針或從Y順時針旋轉。 –

+0

所以你的意思是相反的一行可能有相同的theta? – HenryChen

+0

Theta沒有被綁定到區間[0,PI/2],它只是表示測量角度的方向。 正如@AlexanderEkzhanov所說,角度是從x軸開始逆時針測量的,它給出垂直線的PI/2值。這並不意味着Theta不能超過這個數值。 – s1h

回答

1

這就是我所理解的。我認爲你的控制檯應該顯示的角度是橙色(約-0.72弧度)。但看起來像OpenCV使用正角度爲所有線路的平行線。我的意思是紫色的角度,這是你的控制檯顯示(約2.5拉德)。所以你的線有這個theta和rho(到線的距離)是負值。這是因爲你的線位於原點的右側。 (我畫的圖片在畫圖,對不起,如果它是不漂亮)

enter image description here

+0

非常感謝Kanat。 – HenryChen

+0

所以它看起來像opencv線路不能告訴方向的權利? – HenryChen

+0

我不確定所有opencv行,@亨利陳。在這個特定的情況下theta不顯示線的角度。它顯示了x軸與垂直於順時針方向的直線之間的角度。 – Kanat

5

爲OpenCV的,對方回答這個問題,和維基百科的文檔(如寫這個答案)是錯誤的。這是我一生中第一次在維基百科發現技術錯誤。

cv2.HoughLines爲您提供了映射到線條的線對(r,theta)。 Theta是x軸(圖像)和線之間的逆時針角度。它介於零和pi之間。 Rho是從圖像左上角到該線的「距離」。正如OP指出的那樣,rho通常是負面的,因此不是一個合適的距離。以下是OpenCV的作者意思:

如果theta < pi/2,我們正在討論從圖像左下角到右上角的一條線。在這種情況下,它不能穿過0以下的x軸,並且我們確切知道要繪製的線(給出rho)。到目前爲止,OpenCV文檔是正確的。

如果theta> pi/2,那麼我們需要在與原點等距的兩條平行線之間消除歧義。爲了解決這個問題,HoughLines的作者制定了一條規則:如果theta> pi/2,穿過圖像左側的線條具有正ρho,並且穿過圖像頂部的線條具有負ρho,則爲

+1

這工作,謝謝! – Carpetfizz

0

Rho是所有傳入rho或距離原點的「桶」或累加器數組的大小。圖像中最長的距離是從左上角到右下角,因此爲了獲得最大精度,請將該值插入houghlines rho。Theta是所有傳入theta的桶的大小。爲了獲得最大精度,您需要180的值。爲了僅檢測偶數角度,theta應該是90.爲了僅檢測可被30整除的角度,theta應該是6