• 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
  • 相关阅读:
    python查找算法_顺序查找
    Hutool工具包中BeanUtil的使用
    一道经典的指针笔试题!!!!
    [CISCN2019 华北赛区 Day1 Web2]ikun
    使用RabbitMQ异步执行业务
    Maven概述
    gitee上传代码到仓库步骤(最简洁图文+命令说明)
    PLC 学习day01 了解PLC 的组成和知识。
    hive笔记(五):查询、排序-join语句/连接/分区/sort by/distribute by/cluster by
    安装ideaIU-2022.1.4报错问题解决办法
  • 原文地址:https://blog.csdn.net/weixin_45672157/article/details/136749727