【问题标题】:What is the most basic line detection method in OpenCVOpenCV中最基本的线检测方法是什么
【发布时间】:2016-07-22 17:00:04
【问题描述】:

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

我的想法是,由于它总是水平的,我可以通过图像上的几列垂直搜索“边缘”,并称之为好。甚至可以缩小我从相机捕获的像素数量,以进一步提高速度。

这种类型的线检测是否有内置函数?

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

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

【问题讨论】:

标签: opencv computer-vision line detection vision


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我最终采用的方法是 for 循环。在对图像进行阈值处理后,我沿着两列搜索以找到所有“边缘”或值的变化。然后我处理这个列表,只找到水平的边对。

    然后我找到所有足够靠近的线条,并具有所需的填充(与阈值图像进行布尔比较),这实际上只找到了我有兴趣跟踪的胶带条。

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

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

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

    【讨论】:

    • 也许你应该熟悉一下霍夫变换。那么你甚至不必考虑它:)
    • Piglet,我现在很熟悉它,但同样,由于处理速度是一个问题,我需要一个更简单的解决方案。我不想做“边缘检测->霍夫变换->去霍夫”,当我基本上可以一起破解自定义边缘检测器时,它会告诉我水平线在哪里。同样,我确信 Hough 可以工作,但对于这个应用程序来说,它过于强大,而且太慢了。
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2016-08-21
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多