我正在开展学校项目,我必须在图像中检测地平线。我们必须使用openCV。通过使用canny边缘检测器和概率Hough变换,我可以成功地检测图像中的horiton。这是我的结果:
如您所见,显示地平线位置的线由多条线组成。 我的老师对于地平线检测的准确性很好,但他希望我将这条多线合并为一条曲线。
有没有简单的方法呢?
我在编程方面有点新意,所以非常感谢每一个帮助。
我想为我糟糕的英语道歉。
编辑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);
}
答案 0 :(得分:1)
你提到的Hough变换通常会返回图片中找到的所有行(高于给定的阈值)。它们不需要是连续的,可以处于完全不同的位置和方向。
在你的情况下,他们出人意料地跟随地平线。您可以通过收集所有起点和/或终点,按x坐标对其进行排序并使用例如polylines
然而,考虑到给出的示例图像,我也会尝试一些不同的方法。例如Canny边缘检测具有高的高斯和高阈值,活动轮廓或每个图像列中最强的垂直梯度(Sobel)。