2012-11-22 64 views
6

我是新來opencv(在c + +),我試圖實現線檢測。OpenCV線檢測一般

我有一兩行圖片,我試圖確定行之間的距離。我知道有Hough,Canny等等,但我怎樣才能得到不同線的座標來計算線之間的距離?我應該使用opencv輪廓函數還是有更好的方法?我不需要完整的代碼示例,但任何人都可以告訴我完成工作的最佳方式嗎?

+0

您不需要在帖子中添加簽名 - 您的用戶卡會自動添加。 – Artemix

回答

13

線檢測通常使用霍夫變換,Canny邊緣檢測器和輪廓檢測僅在需要時充當方便的預處理器。

如果有平行線,使用

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0) 

,用於檢測線,其中所述第二參數包括檢測:

線 - 線的輸出矢量。每行由一個 二元向量(ρ,θ)表示。 ρ是距座標 原點(0,0)(圖像的左上角)的距離。 θ是以弧度表示的角度(0〜垂直線,π/ 2〜水平線)的旋轉角度 。
[opencv2refman.pdf]

這意味着,兩條線之間的距離應該​​,該距離是在lines第一列的像素值之間的絕對差。 (注:方法應該是CV_HOUGH_STANDARD這裏!)

對於你必須定義什麼你認爲的距離,但隨後的OpenCV仍然可以爲您提供每個檢測線的端點座標非平行線。
你只需要使用method = CV_HOUGH_PROBABILISTIC

CV_HOUGH_PROBABILISTIC概率Hough變換(在情況下更有效的 如果圖象包含了一些長的直線段)。它 返回線段而不是整條線。每個段由開始點和結束點代表的 ,並且矩陣必須是CV_32SC4類型的(將創建序列的 )。
[opencv2refman.pdf]

您也可以找到你安裝的OpenCV的文檔內opencv_tutorials.pdf的教程。

+0

謝謝你的回答!在接下來的步驟中,我想估計一下我的照片中的線條質量。線條是開槽的邊緣,應該平行。在幾個地方,開槽損壞,邊緣不再平行。有沒有一種簡單的方法來獲得實際邊緣與直線的偏差? – marc

+0

呃,我不確定。我認爲它值得作爲一個單獨的問題發佈。 –

+0

如果我的回答有幫助,你可以投票嗎? –