OpenCV:可以检测移动物体吗?

时间:2013-06-01 17:44:30

标签: c++ opencv image-processing pattern-matching artificial-intelligence

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

所以,请告诉我在opencv中是否有任何方法我们可以检测到所有有用的移动物体,如人类,汽车,货车,动物等,而不是无用的东西,如移动树枝,移动水波等。

有些人告诉我“模式识别”会有所帮助,但我没有时间和它一起移动,我只有4个月而且我不是数学家。无论如何,如果这可以很容易地用于视频opencv,那么我可以考虑一下。

请帮忙。

2 个答案:

答案 0 :(得分:4)

不,你不必重新发明轮子。网上有很多例子来检测移动物体 你可以google about motion

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

关于检测物体,你可以根据运动修正区域,你可以指定运动的阈值,可以通过二值化抓取物体

答案 1 :(得分:3)

查看背景/前景分割方法。它们用于通过使用统计方法来估计背景来分割(检测)移动物体。 OpenCV版本2.4.5为背景减法提供了许多不同的实现,即

  • BackgroundSubtractorMOG
  • BackgroundSubtractorMOG2
  • FGDStatModel
  • MOG_GPU
  • MOG2_GPU VIBE_GPU< - 列在非免费功能
  • GMG_GPU

{opencv_folder} \ samples \ gpu中有一个演示源代码bgfg_segm.cpp。该演示显示了分段类的使用和显示输出(在GPU上)。还有一个类似于CPU的演示,只是寻找它。基于GPU的类提供实时性能。

该方法将对象输出为轮廓或掩码。检测后,您可以通过应用形态学操作(如扩张和侵蚀)去除一些误报和噪音。此外,您只能保留面积足够大的轮廓(以便可以过滤掉小的叶子)。