1

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

在 OpenCV 中有什么方法可以让我们检测到所有有用的移动物体,比如人类、汽车、货车、动物等,而不是检测无用的东西,比如移动的树枝、移动的水波等。

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

4

2 回答 2

4

不,您不必重新发明轮子。网上有很多例子可以检测运动的物体,你可以用谷歌搜索运动

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

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

于 2013-06-01T18:57:38.960 回答
3

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

  • 背景减法器MOG
  • 背景减法器MOG2
  • FGDStat模型
  • MOG_GPU
  • MOG2_GPU VIBE_GPU <- 列在非免费功能下
  • GMG_GPU

{opencv_folder}\samples\gpu 中有一个演示源代码 bgfg_segm.cpp。该演示显示了分割类的用法并显示输出(在 GPU 上)。CPU也有类似的demo,随便找找。基于 GPU 的类提供实时性能。

该方法会将对象输出为轮廓或蒙版。检测后,您可以通过应用形态学操作(例如膨胀和腐蚀)来消除一些误报和噪声。此外,您只能保留面积足够大的轮廓(这样小的叶子可能会被过滤掉)。

于 2013-06-01T19:03:37.413 回答