aihot  2017-05-07 07:51:05  OpenCV |   查看评论   

1 void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta,int threshold, double minLineLength=0, double maxLineGap=0 );

 

解释一下最后两个参数,minLineLength指定了检测直线中的最小宽度,如果低于最小宽度则舍弃掉,maxLineGap指定通过同一点的直线,如果距离小于maxLineGap就会进行合并。

下面是一个用HoughLinesP检测直线的例子:

 1 int main()  2 {  3     Mat image=imread("../car.png");  4     Mat I;  5     cvtColor(image,I,CV_BGR2GRAY);  6     
 7     Mat contours;  8     Canny(I,contours,125,350);  9     threshold(contours,contours,128,255,THRESH_BINARY); 10 
11     vector<Vec4i> lines; 12     // 检测直线,最小投票为90,线条不短于50,间隙不小于10
13     HoughLinesP(contours,lines,1,CV_PI/180,80,50,10); 14     drawDetectLines(image,lines,Scalar(0,255,0)); 15 
16     namedWindow("Lines"); 17     imshow("Lines",image); 18     waitKey(); 19     return 0; 20 }

 

上面将检测到的线条保存在lines变量内,我们需要进一步将它们画在图像上:

 1 void drawDetectLines(Mat& image,const vector<Vec4i>& lines,Scalar & color)  2 {  3     // 将检测到的直线在图上画出来
 4     vector<Vec4i>::const_iterator it=lines.begin();  5     while(it!=lines.end())  6     {  7         Point pt1((*it)[0],(*it)[1]);             
          
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV成长之路(8):直线、轮廓的提取与描述

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]