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

sha*_*dee 1 c++ opencv computer-vision

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

我发现了一些类似的问题: 对象计数

我发现这是类似的 http://labs.globant.com/uncategorized/peopletracker-people-and-object-tracking/

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

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

mar*_*rol 5

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

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

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

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

  1. 当没有人在相机前移动时保存帧,稍后将用作背景参考
  2. 在一个循环中,应用一些背景探测器以提取图像表示运动部件(MOG甚至你可以计算背景和当前帧之间的差异,其次是二进制阈值和斑点计数,看到我的答案在这里)
  3. 根据假设,只应检测到一个blob(如果不是,请使用一些选择"最佳"的指标.例如,选择具有最大面积的指标).那个blob是我们想跟踪的人.知道它在图像上的位置,与"垂直线"的位置进行比较.从左到右移动的物体正在退出,从右到左进入.

请记住,此解决方案仅适用于我们所说的假设.