OpenCV中最基本的直线检测方法是什么

What is the most basic line detection method in OpenCV

刚学OpenCV,想请教一下直线检测。我有一种情况需要检测白色背景上的水平黑线。我保证这条线总是水平显示(在几度内)并且需要检测它在相机图像中的位置。

我的想法是,因为它总是水平的,所以我可以通过图像上的几列垂直搜索"edge",并称它很好。甚至可以缩小我从相机捕获的像素数量,以额外提高速度。

是否有用于此类线检测的内置函数?

我不需要额外的力量,也负担不起Canny或Hough的处理时间,我只想尽快找到一条有保证的水平线。

图像(使用我的解决方案 运行)如下所示:

如果您提供您所谈论的图像类型,那么建议解决方案会更好。

另外我想知道,为什么你不能使用计算成本不高的 Canny Detector。此外,您还可以将图像倒置,计算边缘并过滤水平边缘。

另一方面,知道你的水平边缘在图像平面上总是水平的,你可以使用模板匹配。

我最终采用的方法是 for 循环。对图像进行阈值处理后,我搜索两列以查找所有 "edges" 或值的变化。然后我处理这个列表以仅找到水平的边对。

然后我找到所有足够靠近的线,并有一个所需的填充(与阈值图像的布尔比较),这实际上只找到我感兴趣的磁带条。

这大约是 Canny 调用时间的 1/50,不包括同样必需的 findContours 等。然而,我没有针对 Hough 进行过测试,但我相信这仍然会快得多。

由于最大的问题是处理速度,我也做了一些其他的优化。

代码可以在这里找到(评论非常好,我保证):Code as a gist