OpenCV 3.1.0:如何使用 BackgroundSubtractorMOG class

OpenCV 3.1.0 : How to use BackgroundSubtractorMOG class

我安装了 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>

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

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
                                          ^

我试图查看文档。我不知道要包含什么 header。我不知道如何正确实例化 class 的实例。

做什么?

在您发布的代码中,我没有看到任何关于命名空间的声明。 (例如 using namespace cv 在您的序言中)。否则,您必须在 OpenCV 代码前面加上 cv::(例如 cv::Mat frame 以声明 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();
...

希望这对您有所帮助, 兆焦耳