Opencv对象跟踪和计数在视频帧中通过ROI的对象
Opencv Object tracking and count objects which passes ROI in video frame
我正在制作Opencv应用程序,需要计算相机可以检测到的任何运动对象。相机是静止的,我做了对象跟踪与opencv和cvblob参考了许多教程。
我发现一些类似的问题:对象计数
我发现这是相似的http://labs.globant.com/uncategorized/peopletracker-people-and-object-tracking/
我是OpenCV的新手,我已经通过了OpenCV文档,但我找不到任何与视频中移动对象计数相关的内容。
谁能告诉我怎么做,特别是计数部分。正如我在上面的文章中读到的,他们统计了那些越过虚拟界限的人。是否有特殊的算法来检测过线的物体?
你的问题可能是广泛的,当你问关于在视频序列中计算移动对象的一般技术。我给你一些提示,也许能帮到你:
- 通常在计算机视觉中,没有一种特定的方法可以解决你的问题。尝试做一些关于人物检测,背景提取和运动检测的研究,以获得更广泛的视角
- 更清楚地说明您的系统的用户需求,即图像框架中可以出现多少人?当您想要跟踪多个人时,事情就变得复杂了。此外,其他移动的物体能否出现在图像上(例如动物)?如果没有并且只有一个人应该被跟踪,那么你的问题的答案很简单,请参阅下面的解释。如果是,你需要做更多的研究。 通常你无法在OpenCV API中找到直接解决计算机视觉问题的方法,即没有这样的方法直接解决人的计数问题。但肯定有一些论文,参考(通常是一些科学的东西)可以用来解决你的问题。所以没有办法"计算跨越竖线的人数"。你必须解决合并算法的问题。
在你提供的链接中,可以看到他们使用一些算法来提取背景,确定什么是不移动的背景和移动的前景(在我们的例子中,一个行走的人)。我们不确定他们是否使用了更复杂的东西,但是关于背景提取的信息足以让我们开始解决问题。
这是我对解决方案的贡献。假设只有一个人在稳定放置的摄像机前行走,并且看不到其他物体的运动,则按照以下步骤进行操作:
- 在镜头前没有人移动时保存帧,稍后将作为背景 的参考。
- 在一个循环中,应用一些背景检测器来提取图像中代表运动的部分(MOG甚至你可以只是计算背景和当前帧之间的差异,然后是二进制阈值和blob计数,见我的答案在这里)
- 根据假设,只应该检测到一个blob(如果没有,使用一些指标选择"最好的一个")。例如,选择面积最大的那个)。那个斑点就是我们要追踪的人。知道它在图像上的位置,比较"垂直线"的位置。从左向右移动的对象表示退出,从右向左移动的对象表示进入。
请记住,这个解决方案只适用于我们所述的假设。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 使用本地二进制模式进行对象跟踪:更改检测ROI的大小
- 从帧逐帧删除对象(ROI内),然后在opencvc++中组合回视频
- Opencv对象跟踪和计数在视频帧中通过ROI的对象
- 尽管初始大小固定,但用于跟踪对象的边界框/ROI 的大小仍在不断增加
- 特定对象的立体对应和三维定位(ROI)