2

我有一个图像序列(视频)。我想计算图像序列中的对象数量。但主要目标是将它们计数一次,这意味着不仅仅是在每一帧中,因为一个对象可能存在于几个帧中。我的想法是在物体退出屏幕时对它们进行计数,因为遮挡较少。我正在考虑通过扫描图像底部的非零像素来做到这一点。

我有一个 CV_FILLED 二进制图像(来自矩形函数),我想在其中进行扫描,然后在找到 abject 时在对象上创建一个实例。但是这种扫描不会扫描水平线上的每一个像素,只是扫描某些部分。

就像我们可以在范围上做它,比如某些列,然后跳过一个边距。

附上我拥有的示例二进制图像CV_FILLED 二值图像。这是从提要中获得的图像。我不想只计算这张图片中的物体,还要计算那些仍在到来的物体。

此处附上检测到的对象的全图。欢迎您的指导或建设性批评 *我不想使用 CVBlob

4

3 回答 3

1

如果您不想使用 cvBlobLib,您可以使用 OpenCV 中的轮廓检测。

网站上有教程

该方法的文档在这里。您的图像看起来很简单,但是如果您得到带有遮挡的斑点,因此您想查看 CV_RETR_EXTERNAL 常量以仅获取外部轮廓。

这就是我通常使用的方法,尽管它需要更多的工作才能使用该方法的结果。

希望这可以帮助。

于 2012-11-12T08:23:39.747 回答
1

如果正方形在底部不重叠,我建议如下:

扫描图像的最底行并识别那些连接的白色像素。每条白线将对应一个正方形。保存白线段的中心及其长度。在下一帧中,执行相同操作并将相应的线段与前一帧相关联(长度相同且中心非常接近)。当您再也找不到相应的线段时,正方形已移出图像,这意味着您可以将正方形计数器增加一。请注意,线的左右两端的线段的长度将随着每一帧而减小。

于 2012-11-18T20:38:43.797 回答
0

谢谢各位。我已经设法解决了这个问题。我沿着正方形的路径使用了小的 ROI,并countNonZero()在 ROI 内找到。

我不断检查boolean变量以查看 ROI 是否仍有白色像素。如果不是,则递增计数器。工作得很好,我能够数数。

谢谢您的输入...

于 2012-11-19T09:42:38.073 回答