我安装了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
^
我试着查看文档。我无法弄清楚要包含哪个标题。我无法弄清楚如何正确地实例化该类的实例。
做什么?
答案 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