2015-04-23 52 views
1

我目前使用Hough變換來獲得直線。但是有很多線條被檢測到。我可以知道如何過濾,只能從輸出中獲得最長的一行嗎?如何過濾Hough變換後僅最長的行

 HoughLinesP(dst, lines, 1, CV_PI/180, 50, 20, 10); //left lane 

     for(size_t i = 0; i < lines.size(); i++) 
     { 
     Vec4i l = lines[i]; 
     double theta1,theta2, hyp, result; 

     theta1 = (l[3]-l[1]); 
     theta2 = (l[2]-l[0]); 
     hyp = hypot(theta1,theta2); 

     line(cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(255,0,0), 3, CV_AA); 

     } 

     imshow("detected lines", cdst); 

}

回答

0

據我所看到的,你是從字面上一步之遙:

hypot功能爲您提供了起點和終點之間的距離。現在,只需找到最長的距離,相應的線條就是最長的。

Vec4i max_l; 
double max_dist = -1.0; 

for(size_t i = 0; i < lines.size(); i++) 
{ 
    Vec4i l = lines[i]; 
    double theta1,theta2, hyp, result; 

    theta1 = (l[3]-l[1]); 
    theta2 = (l[2]-l[0]); 
    hyp = hypot(theta1,theta2); 

    if (max_dist < hyp) { 
     max_l = l; 
     max_dist = hyp; 
    }   
} 

// max_l now has the line of maximum length 
line(cdst, Point(max_l[0], max_l[1]), Point(max_l[2], max_l[3]), Scalar(255,0,0), 3, CV_AA); 
// do something else with max_l 
+2

「// l現在有你的最大長度線」No. l是線條的最後一個元素。你不更新max_dist,所以max_dist FooBar

+1

@FooBar:Ooopsies。非常抱歉。我的錯。現在更新,謝謝! –

+0

嗨@aspiring_sarge和FooBar,我試過了,但似乎所有的線仍然出現。這是由於for循環嗎?或者我需要先把它放在什麼地方?仍然在調試 –