计算二进制图像中的前景对象

时间:2012-11-10 01:03:29

标签: visual-c++ image-processing opencv computer-vision

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

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

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

我附加的样本二进制图像CV_FILLED binary image。这是从饲料中获得的图像。我不想只计算此图像中的对象,还要计算那些仍然存在的对象。

此处附有检测到的物品的全貌。欢迎您提供指导或建设性批评 *我不想使用CVBlob

3 个答案:

答案 0 :(得分:1)

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

有一个教程on the website.

该方法的文档是here。你的图像看起来很简单,但是如果你得到带有遮挡的blob,那么你想要查看CV_RETR_EXTERNAL常量来获得外部轮廓。

这是我通常使用的,即使它需要更多的工作来使用该方法的结果。

希望这有帮助。

答案 1 :(得分:1)

如果方块底部不重叠,我建议如下:

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

答案 2 :(得分:0)

Thx伙计们。我设法解决了这个问题。我在广场的路径上使用了小投资回报率,并在投资回报率中找到了countNonZero()

我一直在检查boolean个变量,看看ROI是否还有白色像素。如果没有,递增计数器。工作得很好,我能算数。

感谢您的投入......