【问题标题】:Object of abstract class type "cv::BackgroundSubtractorMOG2" is not allowed. all the methods are pure virtual不允许抽象类类型“cv::BackgroundSubtractorMOG2”的对象。所有方法都是纯虚的
【发布时间】:2015-12-08 09:38:50
【问题描述】:

我在 Windows 7 64bit 的 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;
}

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

【问题讨论】:

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


    【解决方案1】:

    语法已从 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;
    }
    

    【讨论】:

    • 非常感谢。它工作得很好。我看到其他人写了“pMOG2 = new BackgroundSubtractorMOG2();”唯一的区别是关键词“新”。但结果不同。
    • @X.F 是以前版本的语法。例如。它适用于 OpenCV 2.4.9
    • 您在哪里可以找到此更改?来自Opencv的网站?
    • @X.F 是的,在 OpenCV 文档中:docs.opencv.org/master/de/de1/…
    • 您在哪里可以找到此更改?从Opencv的网站?我搜索了 Opencv 网站,但只找到了一些描述而不是语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多