OpenCV 3.1.0:如何使用BackgroundSubtractorMOG类

OpenCV 3.1.0 : How to use BackgroundSubtractorMOG class

本文关键字:何使用 BackgroundSubtractorMOG OpenCV      更新时间:2023-10-16

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

我试着去看文档。我不知道该包括什么标题。我不知道如何正确地实例化类的实例。

在您发布的代码中,我没有看到任何关于名称空间的语句。(例如,序言中的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();
...

希望这有帮助,乔丹