Opencv对象跟踪和计数在视频帧中通过ROI的对象

时间:2014-06-27 15:37:38

标签: c++ opencv computer-vision

我正在开发Opencv应用程序,需要计算摄像机可以检测到任何运动的任何对象。相机还在,我通过引用很多教程用opencv和cvblob进行了对象跟踪。

我发现了一些类似的问题: Object counting

我发现这很相似 http://labs.globant.com/uncategorized/peopletracker-people-and-object-tracking/

我是OpenCV的新手,我已经浏览过opencv文档,但我找不到与计算视频中移动对象有关的任何内容。

任何人都可以告诉我如何特别做计算部分。正如我在上面的文章中所读到的那样,他们统计了跨越虚线的人。是否有一种特殊的算法来检测穿越线的物体?

1 个答案:

答案 0 :(得分:5)

当您询问计算视频序列中移动对象的一般技术时,您的问题可能会很广泛。我会提供一些可能对你有帮助的提示:

  • 与计算机视觉中一样,没有一种特定的方法可以解决您的问题。尝试做一些关于人物检测,背景提取运动检测的研究,以获得更广泛的观点
  • 更清楚地说明系统的用户要求,即图像框架中可以出现多少人?如果您想跟踪更多而不是一个人,事情会变得复杂。此外,其他移动物体可以出现在图像上(例如动物)吗?如果没有,并且只有一个人应该跟踪,问题的答案很简单,请参阅下面的解释。如果是的话,你将不得不做更多的研究。
  • 通常你无法在OpenCV API中找到直接解决计算机视觉问题,即没有这样的方法直接解决人数统计问题。但可以肯定的是,有一些论文,参考(通常是一些科学的东西)可以用来解决你的问题。所以没有办法“计算人们穿越垂直线”。你必须解决我合并一些算法的问题。

在您提供的链接中,可以看到他们使用一些算法进行背景提取,这些算法确定了什么是非移动背景和移动前景(在我们的例子中,是一个行走的人)。我们不确定他们是否使用更多(或复杂)的东西,但有关背景提取的信息足以从问题解决开始。

这是我对解决方案的贡献。假设只有一个人走在稳定放置的摄像机前面,并且没有观察到其他物体运动,请执行以下操作:

  1. 当没有人在相机前移动时保存框架,稍后将用作背景的参考
  2. 在循环中,应用一些背景探测器来提取代表运动的图像中的部分(MOG,或者甚至可以计算背景和当前帧之间的差异,然后是二进制阈值和斑点计数,请参阅我的答案{ {3}})
  3. 从假设中,只应检测到一个blob(如果不是,请使用选择“最佳”的一些指标。例如,选择具有最大面积的指标)。那个blob是我们想跟踪的人。知道它在图像上的位置,与“垂直线”的位置进行比较。从左到右移动的物体正在退出,从右到左进入。
  4. 请记住,此解决方案仅适用于我们所说的假设。