有可能在OpenCV中检测移动的物体吗?
Is it possible to detect a moving object in OpenCV?
我被要求写一个代码,可以检测任何移动的对象使用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的类提供实时性能。
该方法将输出对象作为轮廓或蒙版。检测后,可以通过形态学操作(如扩张和侵蚀)去除一些误报和噪声。此外,您只能保留具有足够大面积的轮廓(因此,较小的叶子可能会被过滤掉)。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 尝试导入pybind-opencv模块时出现libgtk错误
- OpenCV中移动相机的深度/视差图
- 将代码移动到 Opencv cv::P arallelLoopBody
- OpenCV在我移动命名窗口时崩溃
- OpenCV:相对于参考图像移动/对齐面图像(图像配准)
- 移动 OpenCV Visual Studio 项目
- 检测OpenCV C (移动相机)上的运动
- 绘制opencv中多个移动对象的轨迹
- 使用OpenCV/C++中的KalmanFilter跟踪多个移动对象-如何为检测到的对象单独指定轨迹
- 在OpenCV中移动图像内容
- 如何在opencv中使用对象跟踪的概念移动鼠标
- 有可能在OpenCV中检测移动的物体吗?
- 使用opencv仅检测缓慢移动的物体
- OpenCV错误:在矢量之间移动数据时断言失败
- 使用OpenCV工具从连续的图像差异中检测国际象棋的移动
- 如何平均视频文件的所有帧,其中对象在OpenCV中不移动
- OpenCV在鼠标移动时停止渲染