OpenCV:如何将多条线合并为一条曲线

时间:2013-11-04 15:13:14

标签: c++ opencv

我正在开展学校项目,我必须在图像中检测地平线。我们必须使用openCV。通过使用canny边缘检测器和概率Hough变换,我可以成功地检测图像中的horiton。这是我的结果:

Image with detected horizon

如您所见,显示地平线位置的线由多条线组成。 我的老师对于地平线检测的准确性很好,但他希望我将这条多线合并为一条曲线。

有没有简单的方法呢?

我在编程方面有点新意,所以非常感谢每一个帮助。

我想为我糟糕的英语道歉。

编辑1.: 这就是我创建线条的方式:

  vector<Vec4i> lines;
  HoughLinesP(dst, lines, 1, CV_PI/180, 1, 1, 200 );
  for( size_t i = 0; i < lines.size(); i++ )
  {
    Vec4i l = lines[i];
    line( src, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
  }

1 个答案:

答案 0 :(得分:1)

你提到的Hough变换通常会返回图片中找到的所有行(高于给定的阈值)。它们不需要是连续的,可以处于完全不同的位置和方向。

在你的情况下,他们出人意料地跟随地平线。您可以通过收集所有起点和/或终点,按x坐标对其进行排序并使用例如polylines

然而,考虑到给出的示例图像,我也会尝试一些不同的方法。例如Canny边缘检测具有高的高斯和高阈值,活动轮廓或每个图像列中最强的垂直梯度(Sobel)。