从轮廓位置生成边界框

Posted

技术标签:

【中文标题】从轮廓位置生成边界框【英文标题】:Produce bounding box from contour locations 【发布时间】:2012-03-18 17:44:55 【问题描述】:

我是 OpenCV 的新手,所以如果我使用了不正确的术语,我深表歉意。我正在用 C 语言编写一个程序,该程序在图像中查找对象(在本例中为红色构建块)并提取图像的该部分并将其显示为新图像。我已经对图像进行了阈值处理以去除除红色之外的所有内容,并使用 cvDilate 稍微模糊结果以使对象更加清晰。然后我使用 OpenCV Contour 查找和绘图功能来定位和绘制块。

如何访问存储为 CvSeq* 的轮廓位置并从一组轮廓中获取最高和最低的轮廓值(其他红色对象可能仍然存在一些噪声),以便我可以进行边界盒子周围?

谢谢

【问题讨论】:

【参考方案1】:

实际上,您不必手动执行此操作,因为 OpenCV 为您提供了此类功能。

查看cvMinAreaRect2 和cvBoundingRect。下面分别是他们的例子:minarea.c(有一些调试的东西,但应该给你如何使用它的要点)和generalContours_demo1.cpp(在 C++ 中,但应该很容易翻译)。

作为旁注,我肯定会建议使用 OpenCV 的 C++ API,因为它更容易理解并且具有更多功能。此外,由于 Mat 类会为您处理,因此您花在内存管理上的时间/代码要少得多。

希望有帮助!

【讨论】:

以上是关于从轮廓位置生成边界框的主要内容,如果未能解决你的问题,请参考以下文章

在轮廓JavaCV周围绘制边界框?

查找具有最大表面积的边界框轮廓,不包括相交区域

如何使用 tf.image.draw_bounding_boxes 在原始图像上绘制边界框以显示检测到对象的位置?

如何裁剪多图像使用文件中的列表边界框位置(python)?

如何从labview显示出点图片中,提取出鼠标所在位置的像素坐标?

带有opencv的手写数字边界框