如何显示 findContours 与 cvBlob 做同样的事情

Posted

技术标签:

【中文标题】如何显示 findContours 与 cvBlob 做同样的事情【英文标题】:How to show that findContours does the same thing as cvBlob does 【发布时间】:2012-10-04 17:51:49 【问题描述】:

我有一个主管,他只想使用 cvBlob 来查找连接的组件。

我如何向他证明 findContours 也可以做到这一点?我已经向他展示了 c++ 和 matlab 代码来证明我的“理论”,但他还不相信。

OpenCV 开发人员是否有任何关于 findContours 确实可以找到 blob 的参考资料?

【问题讨论】:

既然您在概念上证明了它,那么文档说什么或不说什么并不重要。算法和应用很重要,因为您坚持使用同一组工具/库。 【参考方案1】:

您可能可以通过以下方式解决它:

查找轮廓 (cv::findContours) 循环遍历轮廓 找到每个和最小封闭圆的中心点 (cv::minEnclosingCircle) 为每个边界/闭合轮廓绘制(填充)圆

这是一个使用 findContours 检测 @hand-tracking application 的 blob 示例(请查看上面的第 82-107 行),作者为 @andrew-berg。

【讨论】:

同意,您可以轻松绘制使用cv::fillConvexPoly 填充的轮廓。所以你可以用两种方法来比较你的结果。我想不出你的教授为什么需要更多的东西。【参考方案2】:

询问你的主管究竟为什么他更喜欢使用 cvBlob。

有人报告说 cvBlob 比 findContours 快,但 findContours 的优势是标准解决方案,并且有大社区的支持(目前 cvBlob 的支持非常糟糕,抱歉),而且很多比 cvBlob 更通用的功能(更针对特定目标)。

当你的主管给出答案时(如果他可以的话),那么你可以回扣。

顺便说一句,我是 cvBlob 的开发者。

【讨论】:

我已经问过了。主要原因是他过去成功使用过它。我认为这是一个很好的理由,但我们的程序现在基于 OpenCV C++ API,所以我不想回到 C API。是的,我知道 CVBlob 通常更快,但在我们的例子中,图像很大并且 blob 的数量

以上是关于如何显示 findContours 与 cvBlob 做同样的事情的主要内容,如果未能解决你的问题,请参考以下文章

如何正确增加使用 cv::findContours 找到的矩形的大小

使用 findContours 时如何避免检测到图像帧

OpenCV 2.4.2 findContours(),如何只得到直线轮廓

OpenCV findContours,如何检查两边的颜色

OpenCV findContours 堆栈溢出

用实际例子详细探究OpenCV的轮廓检测函数findContours(),彻底搞清每个参数每种模式的真正作用与含义