OpenCV C++绘制矩形基于两行

use*_*244 5 c++ opencv image-processing

我想为我的学校作业做一个停车场检测计划,但我是openCV和图像处理的新手.

我打算做的是使用houghLine来检测停车场上的白线并画一个盒子.但是,停车场的线路不是一个完整的矩形.

示例::

4nFaLkI.jpg

我需要的输出::

YMDuuHr.jpg

我能够使用houghLine绘制垂直线(红线)但我不知道如何加入线(绿线)以形成一个盒子,因为houghLine检测到多个线的点,它不会检测到起点和终点直线点.我也尝试凸壳方法,但我没有设法做到这一点.任何opencv函数都可以克服这个问题?

我真的不知道,希望有人能给我一些解决问题的想法.谢谢.

Chr*_*ger 2

您检查过OpenCV 文档中的示例吗?如果使用该函数,HoughLinesP您将获得线条的 4 个坐标,因此绘制线条非常容易。我从文档中复制了示例:

vector<Vec4i> lines;
HoughLinesP( dst, lines, 1, CV_PI/180, 80, 30, 10 );
for( size_t i = 0; i < lines.size(); i++ )
{
    line( color_dst, Point(lines[i][0], lines[i][1]),
        Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8 );
}
Run Code Online (Sandbox Code Playgroud)

在向量中,lines您可以获得图像中所有线条的坐标。一旦您选择了停车场的两条线,您只需使用它们的坐标来绘制新线即可。例如,如果第一行在 index 中k1,第二行在 中k2,则代码可能如下所示:

line( color_dst, Point(lines[k1][0], lines[k1][1]),
  Point(lines[k2][0], lines[k2][1]), Scalar(0,0,255), 3, 8 );
line( color_dst, Point(lines[k1][2], lines[k1][3]),
  Point(lines[k2][2], lines[k2][3]), Scalar(0,0,255), 3, 8 );
Run Code Online (Sandbox Code Playgroud)