有可能在OpenCV中检测移动的物体吗?

Is it possible to detect a moving object in OpenCV?

本文关键字:移动 OpenCV 检测 有可能      更新时间:2023-10-16

我被要求写一个代码,可以检测任何移动的对象使用OpenCV。它将用于室外系统。但是,有移动的物体吗?据我所知,它可以检测预定义的物体,如人,汽车,球等。我对任何物体都不确定,因为树木也会随风移动,这对系统没有任何用处,如果系统要检测到树木的移动树枝,移动的水波和诸如此类的无用的东西,这将是一个大问题。

在OpenCV中是否有任何方法可以检测所有有用的移动物体,如人类,汽车,货车,动物等,而不是无用的东西,如移动的树枝,移动的海浪等。

有些人告诉我"模式识别"会有帮助,但我没有时间去做,我只有4个月的时间,我不是一个数学人。无论如何,如果这可以很容易地与视频OpenCV一起使用,那么我可以考虑一下。

不,你不必重新发明轮子。在网络上有很多检测移动物体的例子你可以谷歌一下运动。

实现这一目标的简单方法是检测背景,参考前一帧,减去新帧。减去的图像将包含有关运动区域或屏幕(帧)上任何变化的信息

对于物体的检测,可以根据运动对区域进行校正,可以指定运动的阈值,可以通过二值化来抓取物体

了解背景/前景分割方法。它们被用来分割(检测)运动的目标,通过统计方法估计背景。OpenCV 2.4.5版本提供了许多不同的背景减法实现,即

  • BackgroundSubtractorMOG
  • BackgroundSubtractorMOG2
  • FGDStatModel
  • MOG_GPU
  • MOG2_GPU VIBE_GPU <-列在非自由功能
  • GMG_GPU

有一个演示源代码bgfg_segment .cpp位于{opencv_folder}samplesgpu。这个演示展示了分割类的用法和输出(在GPU上)。还有一个类似的CPU演示,只是寻找它。基于gpu的类提供实时性能。

该方法将输出对象作为轮廓或蒙版。检测后,可以通过形态学操作(如扩张和侵蚀)去除一些误报和噪声。此外,您只能保留具有足够大面积的轮廓(因此,较小的叶子可能会被过滤掉)。