当前,您在每个轮廓周围绘制一个边界框,findContour将在每个连接的白色或黑色组件周围找到一个轮廓,在您的图片中有很多轮廓。
因此,我要做的第一件事是对阈值图像进行一些形态学运算,以过滤掉所有噪声:进行一些打开和关闭操作 ,这两者都是扩张和腐蚀的组合。
在你的情况下像cvDilate(2次); cvErode(4次); cvDilate(2次)
这应将所有白色斑点合并为一个平滑斑点,但中间的黑洞将保留。您可以按尺寸找到合适的轮廓,但是使用CV_RETR_EXTERNAL而不是CV_RETR_TREE调用findContours比较容易,那么它将仅返回最外面的轮廓。
0
我正在C ++环境中使用OpenCV开发软件。 目的是检测拳击手套并在手套轮廓周围绘制边界框 。
我遇到的问题是包围框被淹没了不止一次,实际上绘制了多个框。我过去几天试图做的是以某种方式消除绘制的框的数量,只绘制一个大边界框。
我正在寻找一些技巧来将对象填充为完整的对象,我认为在这种情况下确实会有所帮助。
下面,我发布了用于实现图像中显示结果的代码:
如果有人可以提出一些建议或提供一些信息源,我可以在其中找到问题的答案。
编辑 (快速更新):
我设法逐渐改善了输出图像的安静程度,从而对结果感到很满意。关键是腐蚀和膨胀以及在我的
findContours()
函数中的用法。我将CV_RETR_TREE
更改为CV_RETR_EXTERNAL
。我还解决了其他一些小问题,但效果很好:不知道我应该在这里写这个还是打开新线程....但是现在我需要一些有关组件标签和提取参数(例如中心点和面积)的帮助。 :)