OpenCV开发运动检测软件

OpenCV Developing Motion detection Software

本文关键字:软件 运动检测 开发 OpenCV      更新时间:2023-10-16

我在Microsoft Visual 2010 Express中使用OpenCV开发软件的开始。现在,在我开始编码之前,我需要知道的是我必须遵循的程序。

概述:我想开发一个软件,可以检测简单的拳击动作,如(左拳,右拳),并输出结果。

现在我挣扎的地方是我应该采取什么方法,我应该如何应对这种发展,即

  1. 捕获视频片段,并能够提取,让我们说每5帧处理。
  2. 我是否必须提取并存储这一帧,也许有一个参考图像,从中减去捕获帧。
  3. 一旦我捕获了一个帧,处理它的最佳方法是什么:

      * Threshold it, then
      * Detect the edges, then 
      * Smooth the edges using some filter, then
      * Draw some BOUNDING boxes....?
    

你对这些家伙的看法是什么,还是我错过了什么,还是有更好更简单的方法…?有什么建议吗?

任何答案都将非常感激Ps……这不是我的作业

我不确定每隔5帧分析一次是否足够,因为通常打孔速度太快,可能会被忽略。

我猜你真正想找到的是快进(对着镜头)的拳头动作。

在OpenCV的情况下,我将首先从这样的面部运动开始,因为一些例子已经提供了如何在软件包中做到这一点。

要检测和跟踪人脸,您可以使用CvHaarClassifierCascade,但由于这对于运行时检测来说不够快,请继续使用lucas - kanade跟踪这些发现的人脸。只要在之前找到的人脸中选择一些好的跟踪点,记住它们与任意人脸中间的距离,并在每帧更新它。看看这个家伙http://www.youtube.com/watch?v=zNqCNMefyV8 -例子只是一些随机点与卢卡斯-卡纳德跟踪。请注意,不像脸,拳头可能不那么容易跟踪,因为它们的表面相当均匀,最好检查Lukas-Kanade在OpenCV中的演示。

当然,每一帧实际的脸会漂移,一旦在一段时间重新运行CvHaarClassifierCascade和插值到它当前持有的脸的位置。

你应该也能对拳头做上述操作,但这需要用拳头的图片来训练分类器(用人脸训练的分类器已经在OpenCV中提供了)。

现在有了拳头/脸的跟踪,你可以试着观察点发生了什么-当有人出拳时,他们在某个方向上快速移动,而在拳头保持静止时,他们不会移动太多。因此,当你计算最近几帧中单个点的平均移动时,数值越高,被击打的可能性就越大。或者,如果你设法准确地跟踪了它们,如果它们之间的距离增加了,那就意味着物体离相机更近了——所以可能是一个重击。

请注意,如果不知道图片中拳头大小的变化,可能很难区分手的移动是向前还是向后,或者用户是通过向左还是向右移动拳头来假装的。您可能需要想出一些专门的算法(可能需要反复试验)来检测,例如,在先前首先找到的位置增加屏幕颜色像素的数量。

您正在寻找的是行动识别的研究领域,例如www.nada.kth.se/cvap/actions/或可能的解决方案,例如STIP(时空兴趣点)方法www.di.ens.fr/~laptev/actions/。但最后,如果你必须处理遮挡或不同的视角,这是一项艰巨的工作。