opencv的HoughLines( )函数

    xiaoxiao2021-03-25  152

    

    int main(){  Mat src = imread("test.jpg");//载入原始图     Mat src1, src2, src3, src4,dst;   namedWindow("效果图窗口", 1);//定义窗口  Canny(src, src1, 50, 200, 3);//进行一此canny边缘检测  cvtColor(src1, src2, CV_GRAY2BGR);//转化边缘检测后的图为灰度图  vector<Vec2f> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合   HoughLines(src1, lines, 1, CV_PI / 180, 150, 0, 0); //进行霍夫线变换   for (size_t i = 0; i < lines.size(); i++)  {   float rho = lines[i][0], theta = lines[i][1];   Point pt1, pt2;   double a = cos(theta), b = sin(theta);   double x0 = a*rho, y0 = b*rho;   pt1.x = cvRound(x0 + 1000 * (-b));   pt1.y = cvRound(y0 + 1000 * (a));   pt2.x = cvRound(x0 - 1000 * (-b));   pt2.y = cvRound(y0 - 1000 * (a));   line(src2, pt1, pt2, Scalar(55, 100, 195), 1, CV_AA);  }  imshow("效果图窗口", src1);  waitKey(3000);  imshow("效果图窗口", src2);  waitKey(3000);  return 0; }

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

    第一个参数,InputArray类型的image,输入图像,即源图像,需为8位的单通道二进制图像,可以将任意的源图载入进来后由函数修改成此格式后,再填在这里。第二个参数,InputArray类型的lines,经过调用HoughLines函数后储存了霍夫线变换检测到线条的输出矢量。每一条线由具有两个元素的矢量表示,其中,是离坐标原点((0,0)(也就是图像的左上角)的距离。 是弧度线条旋转角度(0~垂直线,π/2~水平线)。第三个参数,double类型的rho,以像素为单位的距离精度。另一种形容方式是直线搜索时的进步尺寸的单位半径。PS:Latex中/rho就表示 。第四个参数,double类型的theta,以弧度为单位的角度精度。另一种形容方式是直线搜索时的进步尺寸的单位角度。第五个参数,int类型的threshold,累加平面的阈值参数,即识别某部分为图中的一条直线时它在累加平面中必须达到的值。大于阈值threshold的线段才可以被检测通过并返回到结果中。第六个参数,double类型的srn,有默认值0。对于多尺度的霍夫变换,这是第三个参数进步尺寸rho的除数距离。粗略的累加器进步尺寸直接是第三个参数rho,而精确的累加器进步尺寸为rho/srn。第七个参数,double类型的stn,有默认值0,对于多尺度霍夫变换,srn表示第四个参数进步尺寸的单位角度theta的除数距离。且如果srn和stn同时为0,就表示使用经典的霍夫变换。否则,这两个参数应该都为正数。

    转载请注明原文地址: https://ju.6miu.com/read-1455.html

    最新回复(0)