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 平行线剔除的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV saturate_cast<uchar>函数用法(饱和剔除)(像素限制溢出滤除像素设限防溢出)