基于OpenCV对复杂线段拟合并求其端点

您所在的位置:网站首页 cv曲线是一条直线对不对 基于OpenCV对复杂线段拟合并求其端点

基于OpenCV对复杂线段拟合并求其端点

2023-08-01 05:16| 来源: 网络整理| 查看: 265

霍夫变换

在图像处理和计算机视觉领域中,我们对于直线检测最常用的就是霍夫变换。霍夫变换是从黑白图像中检测直线和线段。OpenCV支持三种不同的霍夫变换。

标准霍夫变换 (SHT)

多尺度霍夫变换(MSHT)

累积概率霍夫变换(PPHT)

在opencv中,我们可以用HoughLines函数来调用标准霍夫变换和多尺度霍夫变换。而HoughLinesP函数用于调用累积概率霍夫变换,累计霍夫变换的执行效率很高,所以相较于另外两个函数,我们更倾向于使用HoughLiensP函数进行直线检测。检测原理这里就不再多提,下面是我利用绘图,随手画的一条直线,我们开始进行测试。 在这里插入图片描述

Mat srcimg = imread("test.bmp"); Mat temp, gray; Canny(srcimg, temp, 0 ,255, 3); cvtColor(temp, gray, COLOR_GRAY2BGR); vectorlines; HoughLinesP(temp, lines, 1, CV_PI / 180, 25, 20.0, 0); for (size_t i = 0; i Vec4i ln = lines[t]; //line(result_img, Point(ln[0], ln[1]), Point(ln[2], ln[3]), Scalar(0, 0, 255), 2, 8, 0); int x1 = Point(ln[0], ln[1]).x; int y1 = Point(ln[0], ln[1]).y; int x2 = Point(ln[2], ln[3]).x; int y2 = Point(ln[2], ln[3]).y; temp_x1 = x1; temp_x2 = x2; temp_y1 = y1; temp_y2 = y2; fit1.push_back(cv::Point(x1, y1)); fit1.push_back(cv::Point(x2, y2)); if (t > 0) {//根据情况进行点过滤,将合适的点导入到点集中 if ((temp_x1-x1 MaxP = fit1[0]; MinP = fit1[0]; cv::circle(result_img, fit1[k], 5, cv::Scalar(0, 0, 255), 2, 8, 0); for (int j = 0; j MaxP = fit1[j + 1]; } if (fit1[j + 1].x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3