检测人们穿越OpenCV线

我想计算从两边越过一条线的人数。 我有一个放在天花板上的摄像机,用于拍摄线路所在的地板(因此摄像机只能看到人头顶部;所以它更像物体探测而不是人物探测)。

是否有针对此问题或类似问题的示例解决方案? 所以我可以向他们学习?

编辑1:任何时候都有不止一个人越线。

如果除了人类之外什么都不会越过线路,那么你不需要检测你只需要检测运动的人。 有几种用于运动素检测的方法。

可能最简单的一个适合你的目标。 您只需计算video流的连续帧之间的差异,这样就可以确定“运动模板”,从而检测线路交叉事件

作为这种“算法”的改进,您可以考虑“运行平均”方法。

要确定运动方向,您可以使用“运动模板”。

为了提高探测器的准确度,您可以尝试任何背景减法技术(这不是一个简单的解决方案)。 例如,如果有一些移动背景应该被过滤掉(例如使用统计学习)

提到的所有算法都包含在OpenCV库中。

UPD:

  • 如何计算运动遮罩
  • 用于确定运动方向的有用functioncvCalcMotionGradientcvSegmentMotioncvUpdateMotionHistory ( 搜索文档 )。 OpenCV库包含用于运动分析的示例代码,请参阅motempl.c
  • “学习OpenCV”一书中的高级背景减法

我不是基于video的cv的专家,但是如果你可以将问题缩小为有限的图像集(例如,输入帧,站在线,退出帧),那么你可以使用许多形状识别算法之一。 我知道Shape Context是好的,但是我怀疑它是否对这个应用程序来说足够微妙(它不会分辨出头部和大多数其他圆形物体之间的区别)。

基本上,尝试从video中提取关键图像,然后使用形状识别算法对其进行测试。

PS使用良好的运动检测方法可以找到关键图像。