2

我正在从事学校项目,我必须在图像中检测地平线。我们必须使用openCV。我已经到了可以通过使用精明边缘检测器和概率霍夫变换成功检测图像中的水平的地步。这是我的结果:

检测到地平线的图像

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

有简单的方法吗??

我在编程方面有点新,所以每一个帮助都将不胜感激。

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

编辑 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);
  }
4

1 回答 1

2

您提到的霍夫变换通常会返回图片中的所有线条(高于给定阈值)。它们不需要是连续的,可以在完全不同的位置和方向。

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

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

于 2013-11-04T19:02:28.337 回答