OpenCV 3.1.0:如何使用BackgroundSubtractorMOG类

时间:2016-08-25 16:33:40

标签: c++ opencv computer-vision

我安装了OpenCV 3.1.0。 我想使用BackgroundSubtractorMOG,所以在我的文件中我有这些包括:

//opencv
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/video.hpp>
#include <opencv2/video/background_segm.hpp>

//C
#include <stdio.h>
//C++
#include <iostream>
#include <sstream>

我声明了一个指向这种类的指针:

Ptr<BackgroundSubtractorMOG> pMOG;

我将指针初始化为:

pMOG = createBackgroundSubtractorMOG();

当我尝试编译时,我得到了这个:

/home/edd/Desktop/compvis/FML.cpp:19:5: error: ‘BackgroundSubtractorMOG’ was not declared in this scope
 Ptr<BackgroundSubtractorMOG> pMOG; //MOG2 Background subtractor
     ^
/home/edd/Desktop/compvis/FML.cpp:19:28: error: template argument 1 is invalid
 Ptr<BackgroundSubtractorMOG> pMOG; //MOG2 Background subtractor
                            ^
/home/edd/Desktop/compvis/FML.cpp: In function ‘int main(int, char**)’:
/home/edd/Desktop/compvis/FML.cpp:29:42: error: ‘createBackgroundSubtractorMOG’ was not declared in this scope
     pMOG = createBackgroundSubtractorMOG(); //MOG approach
                                          ^

我试着查看文档。我无法弄清楚要包含哪个标题。我无法弄清楚如何正确地实例化该类的实例。

做什么?

1 个答案:

答案 0 :(得分:0)

在您发布的代码中,我没有看到任何有关命名空间的声明。 (例如,序言中的using namespace cv)。否则,您必须使用cv::(例如cv::Mat frame)来声明OpenCV代码以声明Mat对象。

编辑:

#include "opencv2/opencv.hpp"
#include "opencv2/bgsegm.hpp"
...
cv::Ptr<cv::BackgroundSubtractor> mog = cv::bgsegm::createBackgroundSubtractorMOG();
...

使用命名空间:

#include "opencv2/opencv.hpp"
#include "opencv2/bgsegm.hpp"

using namespace cv
...
Ptr<BackgroundSubtractor> mog = bgsegm::createBackgroundSubtractorMOG();
...

希望这有帮助, MJ