Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 等高线的矩形近似_Opencv_Contour - Fatal编程技术网

Opencv 等高线的矩形近似

Opencv 等高线的矩形近似,opencv,contour,Opencv,Contour,经过一些颜色检测、二进制阈值处理,并使用cvFindContours()在图像上绘制轮廓和检测到的蓝色矩形,我得到: 我的问题是要避免一些简单的碰撞(中间的蓝色矩形不能碰到红色的“墙”)。这将有助于我的目的,使红墙轮廓近似与矩形。但是,使用简单的cvBoundingRect并在白色轮廓周围绘制红色矩形,我得到: 边被稍微裁剪了一下,但是您可能会了解到我们希望使用边界矩形作为轮廓的想法,因为整个轮廓用于近似边界矩形,因此也就是大型重叠矩形。我希望将墙轮廓划分为多个边界矩形,如左墙近似为一个矩形

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

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

边被稍微裁剪了一下,但是您可能会了解到我们希望使用边界矩形作为轮廓的想法,因为整个轮廓用于近似边界矩形,因此也就是大型重叠矩形。我希望将墙轮廓划分为多个边界矩形,如左墙近似为一个矩形、右墙、前墙等,如我下面的演示文稿所示:

如果您能帮上忙,我们将不胜感激。

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


但是如果你在左边有上面的图片(你应该已经有了),问题已经解决了。只要画出墙的内部和外部轮廓,就可以了。

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