我正在学校项目中工作,我必须在图像中检测地平线。我们必须使用openCV。我已经达到了可以使用Canny边缘检测器和概率霍夫变换成功检测图像中的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);
  }

最佳答案

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

在您的情况下,它们令人惊讶地很好地跟随了地平线。您可以先收集所有起点和/或终点,然后按x坐标对它们进行排序,然后使用例如polylines

但是,考虑到给出的示例图像,我还将尝试一些不同的方法。例如,每个图像列中的高斯高阈值, Activity 轮廓或仅最强的垂直梯度(Sobel)的Canny边缘检测。

关于c++ - OpenCV:如何将多条线合并为一条曲线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19770798/

10-16 03:41