霍夫变换
在图像处理和计算机视觉领域中,我们对于直线检测最常用的就是霍夫变换。霍夫变换是从黑白图像中检测直线和线段。OpenCV支持三种不同的霍夫变换。
标准霍夫变换 (SHT) 多尺度霍夫变换(MSHT) 累积概率霍夫变换(PPHT) 在opencv中,我们可以用HoughLines函数来调用标准霍夫变换和多尺度霍夫变换。而HoughLinesP函数用于调用累积概率霍夫变换,累计霍夫变换的执行效率很高,所以相较于另外两个函数,我们更倾向于使用HoughLiensP函数进行直线检测。检测原理这里就不再多提,下面是我利用绘图,随手画的一条直线,我们开始进行测试。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304083541552.JPG)
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 |