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();
...
希望这对您有所帮助,
兆焦耳
我安装了 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();
...
希望这对您有所帮助, 兆焦耳