OpenCV 平行线剔除

Posted

技术标签:

【中文标题】OpenCV 平行线剔除【英文标题】:OpenCV parallel lines cull 【发布时间】:2013-04-20 21:38:37 【问题描述】:

我有一个算法,它可以简单地通过多个角落并找到平行的那些。我的问题是,如下所示,我有时会得到假阳性结果。

为了消除这个问题,我打算检查两个点是否落在一条霍夫线上,但这会非常耗费计算量,我想知道是否有人有更简单的想法。

谢谢。

【问题讨论】:

边角平行,是指边角方向吗?因为线可以是平行的,但不能是点。 是的,当然。我在每个点之间创建一条线,然后检查这些线中的任何一条是否与其他线平行并创建平行线对。问题是当我从没有线连接它们的点创建线时,我得到了误报,如上所示。在棕色线条下方,图像连接点中没有线条。 检查我是否理解正确...图像中是否已经存在灰线?并且您正在尝试找到成对的平行灰线? 灰线代表图像,是的。我已将其隔离以搜索点 4-7 和 1-8 以显示问题。问题不在于检测平行线 - 有效,问题在于它会在图像上没有线条的地方创建线条,这是我需要解决的问题。 【参考方案1】:

好的,根据 cmets,这应该是可以修复的。当您检测到一对平行线时,请使用您用来构造它的两个角来获得该线的方程。此行的格式可能为y = mx + c。然后对于两点之间的每个y 坐标,计算x 坐标。这为您提供了线段覆盖的所有像素的集合。遍历这些像素,检查每个像素的强度是否更接近黑色而不是白色。如果集合中的大多数像素都是黑色的,那么它就是一条线。如果不是,那很可能是非线。

【讨论】:

当我说我会将它与我收集的霍夫线进行比较时,这基本上就是我的意思。问题是这会占用大量 CPU,我想知道是否有替代解决方案。 您不需要对整个图像进行霍夫变换。只需从一对角开始获取线方程,然后沿着线遍历这些像素。对于多达 200 个左右角的高清图像,您应该能够在 10 毫秒内完成。

以上是关于OpenCV 平行线剔除的主要内容,如果未能解决你的问题,请参考以下文章

Python openCV检测平行线

opencv-python-仿射变换-图片拉伸成平行四边形

Opencv在python中裁剪平行四边形图像[重复]

OpenCV saturate_cast<uchar>函数用法(饱和剔除)(像素限制溢出滤除像素设限防溢出)

opencv编程中求近似两条平行线的中线,但老是出现内存出错的情况,特求助于大侠了

opencv 图像变换原理详解 图像平移 图像旋转 图像缩放