• 18 OpenCV霍夫变换检测直线


    HoughLines 算子

    cv::HoughLines(
    InputArray src, // 输入图像,必须8-bit的灰度图像
    OutputArray lines, // 输出的极坐标来表示直线
    double rho, // 生成极坐标时候的像素扫描步长
    double theta, //生成极坐标时候的角度步长,一般取值CV_PI/180
    int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
    double srn=0;// 是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
    double stn=0;//是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
    double min_theta=0; // 表示角度扫描范围 0 ~180之间, 默认即可
    double max_theta=CV_PI
    ) // 一般情况是有经验的开发者使用,需要自己反变换到平面空间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    HoughLinesP 算子

    cv::HoughLinesP(
    InputArray src, // 输入图像,必须8-bit的灰度图像
    OutputArray lines, // 输出的极坐标来表示直线
    double rho, // 生成极坐标时候的像素扫描步长
    double theta, //生成极坐标时候的角度步长,一般取值CV_PI/180
    int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
    double minLineLength=0;// 最小直线长度
    double maxLineGap=0;// 最大间隔
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    示例

    #include 
    #include 
    using namespace std;
    using namespace cv;
    
    Mat src, src_gray, dst;
    
    const char* output_title = "final image";
    int main()
    {
    	src = imread("test.png");//读取图片
    	if (src.empty())
    	{
    		cout << "could not load img...";
    		return -1;
    	}
    	namedWindow(output_title);//设置窗口名称
    	imshow("test", src);
    
    	//边缘检测
    	Canny(src, src_gray, 150, 200);
    	//灰度处理
    	cvtColor(src_gray, dst, COLOR_GRAY2BGR);
    
    	vector<Vec4f> plines;//定义一个存储直线参数的容器plines
    	HoughLinesP(src_gray, plines, 1, CV_PI / 180.0, 10, 0, 10);
    	Scalar color = Scalar(0, 0, 255);//定义颜色
    	for (size_t i = 0; i < plines.size(); i++) //便利直线的数量
    	{
    		Vec4f hline = plines[i];
    		line(dst, Point(hline[0], hline[1]), Point(hline[2], hline[3]), color, 3, LINE_AA);//绘制直线
    	}
    	imshow(output_title, dst);
    	waitKey(0);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    在这里插入图片描述

    #include 
    #include 
    using namespace std;
    using namespace cv;
    
    Mat src, src_gray, dst;
    
    const char* output_title = "final image";
    int main()
    {
    	src = imread("test.png");//读取图片
    	if (src.empty())
    	{
    		cout << "could not load img...";
    		return -1;
    	}
    	namedWindow(output_title);//设置窗口名称
    	imshow("test", src);
    
    	//边缘检测
    	Canny(src, src_gray, 150, 200);
    	//灰度处理
    	cvtColor(src_gray, dst, COLOR_GRAY2BGR);
    
    	vector<Vec2f> lines;
    	HoughLines(src_gray, lines, 1, CV_PI / 180, 150, 0, 0);
    	for (size_t i = 0; i < lines.size(); i++) {
    		float rho = lines[i][0]; // 极坐标中的r长度
    		float 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(dst, pt1, pt2, Scalar(0, 0, 255), 1, LINE_AA);
    	}
    
    	imshow(output_title, dst);
    	waitKey(0);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    Linux驱动中断与时间篇——低分辨率定时器
    类和对象(下)
    【HTML】原生js实现的图书馆管理系统
    Hbase
    跟着团子学SAP PPM-项目组合概览-项目组合结构
    Apache网页优化
    【漏洞复现-骑士cms-代码执行】vulfocus/骑士cms_cve_2020_35339
    Mac电脑卸载/删除nodejs
    分布式项目学习笔记(二):本地服务发布成RPC服务
    manjaro系统无法安装
  • 原文地址:https://blog.csdn.net/weixin_45672157/article/details/136749727