2012-07-13 147 views
0

我刚刚写了一个小程序,用于在阈值处理后用canny处理的彩色阈值二值图像中搜索轮廓,但总是会为图像中的每个对象找到两个轮廓。OpenCV findContours Allways为每个对象找到两个轮廓

在绘制找到轮廓的右下角图像中,您可以看到最大轮廓绘制两次,两个轮廓之间有一点偏移。下图显示了该图像的详细视图。

http://img831.imageshack.us/img831/3641/doubleframe2.png

这里只是最大的轮廓绘制两次,但它随机发生的轮廓每隔一个。 我只想为每个物体绘制一个轮廓,我如何实现这个目标? :/

更新:

其由findContours方法填充的轮廓矢量的大小的大小为8,其中它应该有一个尺寸正好4.

更新2:

下面是从超高动力学 http://img405.imageshack.us/img405/9761/inputimage.jpg 的颜色的阈值的RGB输入图像I中使用的以下方针

cv::cvtColor(in, out, CV_BGR2HSV); 
cv::inRange(out, 
      cv::Scalar(25, 131, 97), 
      cv::Scalar(35, 220, 217), 
      out); 

随后侵蚀+扩张与矩形元素的大小为1

+0

请提供原始图像的链接。 – 2012-07-13 11:52:29

+0

完成。必须删除程序的图像,因为我只能发布2个链接:/。 – 2012-07-13 12:26:41

+0

为什么在找到轮廓之前去找Canny?为什么不直接在阈值图像上找到轮廓? – 2012-07-13 13:51:35

回答

3

我认为这个问题是最有可能的,因为当你发现边缘,然后找到那些边缘的轮廓,有一个外边界和内部边界为它。所以openCV将这两个轮廓作为轮廓绘制出来。

当我计算出它的地区,他们大约有的价值的一个非常微小的变化“3”(例如,最大的广场已检测到两个轮廓与地区9105.5和9108.5),这是最有可能由于我提到的原因而发生。 (所以它们很难区分)

如果您发现轮廓与找到canny边缘,可以解决问题。即直接从阈值图像中找到轮廓。它会给你更准确的答案。

在第一种情况下(canny后),我得到了36个轮廓,而在第二种情况下,我只有22个轮廓。

试试吧,希望它能解决问题!

+0

不知道我可以直接在阈值图像上使用findContours,现在效果更好。谢谢! :) – 2012-07-13 14:51:44

+0

最受欢迎!如果它解决了你的问题,你可以接受答案并关闭本次会议。 – 2012-07-13 16:27:10