轮廓的矩形近似

Posted

技术标签:

【中文标题】轮廓的矩形近似【英文标题】:Rectangular approximation of contours 【发布时间】:2013-02-10 06:16:52 【问题描述】:

经过一些颜色检测、二进制阈值处理、使用 cvFindContours() 并在我拥有的图像上绘制轮廓和检测到的蓝色矩形:

我的问题是一些简单的碰撞避免(中心的蓝色矩形不能撞到红色的“墙壁”)。将红墙轮廓近似为矩形将有助于我的目的。但是,使用一个简单的 cvBoundingRect 并在我得到的白色轮廓周围绘制红色矩形:

边缘被剪掉了一点,但您可能会了解我们对轮廓使用边界矩形的期望,因为整个轮廓用于近似边界矩形,因此是大的重叠矩形。我想要的是将墙壁轮廓划分为多个边界矩形,例如左墙近似为一个矩形,右墙,前墙等......如下面的说明性再现:

我们将不胜感激。

【问题讨论】:

【参考方案1】:

检测线(通常是 Hough、RANSAC)以及您掌握的有关问题的其他一些信息应该就足够了,甚至可能是矫枉过正。例如,从左下图开始,我们得到右下图。

但是,如果您在左侧有上面的图像(您应该已经有了),那么问题已经解决了。只需绘制墙壁的内部和外部轮廓即可。

【讨论】:

我之前曾研究过使用 cvHoughLines2,但我对此处列出的各种参数缺乏经验:opencv.willowgarage.com/documentation/feature_detection.html 导致我研究其他解决方案。例如,您是如何获得右边的图像的? (rho=?、theta=? 等) 我没有为此使用 OpenCV,但这样做我设法获得了i.imgur.com/hUCFgsk.png。 rhotheta参数定义了Hough空间中累加器的分辨率,典型值分别为1pi/180(弧度),但rho不需要是整数域,事实上我已经使用rho = 0.1 来获得这个结果。我也设置了threshold = 60。我没有使用概率霍夫,但你也可以试试。 好的,我研究了霍夫变换的工作原理,似乎是检测线条的好方法。我可能应该提到我正在尝试实时处理它并继续检测墙壁,因为蓝色矩形保持在图像中的同一位置但墙壁移动。我相信我现在必须设置参数以考虑每帧之间增加的噪声。是否有这样做的好方法,或者在这种情况下反复试验是否常见? @salgarcia 您可能会找到处理此类问题的论文,但我没有想到要指出的论文。但是,在继续 Hough 变换和相关方法之前,首先要确保左边显示的图像是不够的。清楚地显示了墙的边界,不是很好吗?

以上是关于轮廓的矩形近似的主要内容,如果未能解决你的问题,请参考以下文章

轮廓拟合---OpenCV-Python开发指南(27)

OpenCV竟然可以这样学!成神之路终将不远(十八)

使用 findContour 和生成的轮廓来近似线段以找到线交点

Pytthon,OpenCV轮廓属性轮廓检测及绘制

OpenCV-Python17.OpenCV的图像轮廓——轮廓特征

26opencv入门轮廓查找与绘制——正外接矩形