抽象类类型的对象" cv :: BackgroundSubtractorMOG2"不被允许。所有方法都是纯虚拟的

时间:2015-09-11 18:33:20

标签: c++ visual-studio opencv opencv3.0

我在Windows 7 64位的VS2015 + OpenCV3.0中开发代码。这是一个我想试试的演示代码。我尝试了很多演示,但我遇到了同样的问题:

  

抽象类类型的对象" cv :: BackgroundSubtractorMOG2"不被允许。所有方法都是纯虚函数。

演示代码为:

using namespace cv;
using namespace std;
int main() {
    VideoCapture video("1.avi");
    Mat frame, mask, thresholdImage, output;
    //video>>frame;
    Ptr<BackgroundSubtractor> pMOG2;
    pMOG2 = new BackgroundSubtractorMOG2();
    BackgroundSubtractorMOG2 bgSubtractor(20, 16, true);
    while (true) {
        video >> frame;
        ++frameNum;
        bgSubtractor(frame, mask, 0.001);
        cout << frameNum << endl;
        //imshow("mask",mask);
        //waitKey(10);
    }
    return 0;
}

我包含了很多heaerd文件,但我仍然无法使用类BackgroundSubtractorMOG2,更糟糕的是,BackgroundSubtractorMOG的类未显示。

1 个答案:

答案 0 :(得分:6)

语法已从OpenCV 2.9.X更改。这适用于OpenCV 3.0.0:

#include <opencv2\opencv.hpp>

using namespace cv;
using namespace std;
int main() {
    VideoCapture video("1.avi");
    Mat frame, mask, thresholdImage, output;
    int frameNum = 0;

    Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2(20, 16, true);
    while (true) {
        video >> frame;
        ++frameNum;
        pMOG2->apply(frame, mask, 0.001);

        cout << frameNum << endl;
        imshow("mask",mask);
        waitKey(10);
    }
    return 0;
}