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

Posted

技术标签:

【中文标题】Opencv 对象跟踪和计数在视频帧中通过 ROI 的对象【英文标题】:Opencv Object tracking and count objects which passes ROI in video frame 【发布时间】:2014-06-27 15:37:38 【问题描述】:

我正在开发 Opencv 应用程序,该应用程序需要计算相机可以检测到运动的任何对象。相机是静止的,我通过参考许多教程使用 opencv 和 cvblob 进行了对象跟踪。

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

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

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

谁能给我一个想法,特别是计数部分。正如我在上面的文章中看到的,他们计算越过虚拟线的人数。是否有特殊的算法来检测越线的对象?

【问题讨论】:

你能上传一些示例图片甚至视频吗? 【参考方案1】:

当您询问对视频序列中移动对象进行计数的一般技术时,您的问题可能过于宽泛。我会给出一些可能对您有所帮助的提示:

与计算机视觉一样,没有一种特定的方法可以解决您的问题。尝试做一些关于人物检测、背景提取运动检测的研究,以获得更广阔的视野 更清楚地说明系统的用户要求,即图像帧中可以出现多少人?当您想要跟踪更多个人时,事情会变得复杂。此外,其他移动物体是否会出现在图像上(例如动物)?如果没有并且只有一个人应该被跟踪,那么您的问题的答案很容易,请参阅下面的解释。如果是,您将需要做更多的研究。 通常在 OpenCV API 中找不到直接解决计算机视觉问题的方法,即没有直接解决人数统计问题的方法。但可以肯定的是,有一些论文、参考资料(通常是一些科学资料)可以用来解决您的问题。因此,没有“统计跨越垂直线的人数”的方法。你必须解决我将一些算法合并在一起的问题。

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

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

    当没有人在镜头前移动时保存帧,稍后将用作背景的参考 在一个循环中,应用一些背景检测器来提取图像中表示运动的部分(MOG 或者您甚至可以只计算背景和当前帧之间的差异,然后是二进制阈值和 blob 计数,请参阅我的答案 here ) 根据假设,应该只检测到一个斑点(如果没有,使用一些指标来选择“最好的”。例如选择具有最大面积的那个)。该 blob 是我们要跟踪的人。知道它在图像上的位置,与“垂直线”的位置进行比较。从左到右移动的物体正在退出,从右到左进入。

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

【讨论】:

以上是关于Opencv 对象跟踪和计数在视频帧中通过 ROI 的对象的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCV/C++ 中通过(扩展)卡尔曼滤波器实现数据融合

从 opencv 中的 kcf 跟踪中清除 ROI 历史记录

如何使用 dlib 跟踪 ROI 内的对象?

目标跟踪(3)MultiTracker : 基于 OpenCV (C++/Python) 的多目标跟踪

OpenCV跟踪轮廓将整个图像跟踪为最大轮廓?

OpenCV 不报告准确的帧速率/计数