我试图通过OpenCV.org这个教程:
MOG指针初始化为
Ptr<BackgroundSubtractor> pMOG; //MOG Background subtractor
Run Code Online (Sandbox Code Playgroud)
在主要情况下,它以下列方式使用:
pMOG = createBackgroundSubtractorMOG();
Run Code Online (Sandbox Code Playgroud)
但是,这会产生以下错误:
Error: Identifier "createBackgroundSubtractorMOG" is undefined
Run Code Online (Sandbox Code Playgroud)
此外,要更新背景模型时,使用以下命令:
pMOG->apply(frame, fgMaskMOG);
Run Code Online (Sandbox Code Playgroud)
这又会产生以下错误:
Error: class "cv::BackgroundSubtractor" has no member "apply"
Run Code Online (Sandbox Code Playgroud)
知道可以做些什么吗?提前谢谢了!
这是整个教程代码:
//opencv
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/background_segm.hpp>
//C
#include <stdio.h>
//C++
#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;
//global variables
Mat frame; //current frame
Mat fgMaskMOG; //fg mask generated by MOG method
Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method
Ptr<BackgroundSubtractor> pMOG; //MOG Background subtractor
Ptr<BackgroundSubtractor> …
Run Code Online (Sandbox Code Playgroud) 我正在使用OpenCV2.2用背景减法的方法实现移动物体检测.我使用高斯混合模型(GMM)方法来模拟背景参考图像.
我通过使用OpenCV2.2中提供的类cv :: BackgroundSubtractorMOG直接获取前景像素(或前景蒙版).这很方便,但是cv :: BackgroundSubtractorMOG返回的前景掩码不如我预期的那么好.此外,似乎cv :: BackgroundSubtractorMOG的性能比OpenCV1.0中提供的C语言中写的GMM方法差.
以下是我在OpenCV2.2中的代码:
cv::BackgroundSubtractorMOG mog;
mog(frame, fgMask, 0.01);
Run Code Online (Sandbox Code Playgroud)
那么,我是否以错误的方式使用该方法?
顺便说一句,cv :: BackgroundSubtractorMOG是否对前景像素执行阴影去除?
非常感谢你.
opencv computer-vision background-subtraction mog shadow-removal
如何告诉BackgroundSubtractorMOG2哪些像素要更新到背景模型以及哪些像素不应该更新.
当一个物体进入场景并停止几十秒钟时,我面临问题,物体将被吸收到背景模型中.
我想降低学习率或停止围绕特定停止对象的学习,但我该怎么做呢?BackgroundSubtractorMOG2是否支持在其更新功能中使用掩码?
我正在使用OpenCV 2.4.1.
谢谢,阿尔文.
我需要使用opencv获得高斯混合的背景模型.我知道在C++中有一个名为getBackgroundImage的方法我搜索了是否可以在python接口中获取它但我没有得到好的结果.我试过opencv 3.0.0-dev因为它有BackgroundSubtractorMOG2实现,但是help()函数没有为背景模型记录方法实现.你知道是否有无证实施?我搜索了如何编辑opencv源来实现python实现,但我还没有找到有关它的文档.我更喜欢避免使用scipy.weave来编译c ++代码,而且我不知道scipy.weave在这种情况下是否有用