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变量内,我们需要进一步将它们画在图像上:
除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV成长之路(8):直线、轮廓的提取与描述