L’object de type de classe abstraite «cv :: BackgroundSubtractorMOG2» n’est pas autorisé. toutes les méthodes sont purement virtuelles

Je développe le code dans VS2015 + OpenCV3.0 dans Windows 7 64bit. C’est un code de démonstration que je veux essayer. Et j’ai essayé plusieurs démos mais je rencontrais le même problème:

object de type de classe abstrait “cv :: BackgroundSubtractorMOG2” n’est pas autorisé. toutes les méthodes sont des fonctions virtuelles pures.

Le code de démonstration est:

using namespace cv; using namespace std; int main() { VideoCapture video("1.avi"); Mat frame, mask, thresholdImage, output; //video>>frame; Ptr 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; } 

J’inclus beaucoup de fichiers heaerd mais je ne peux toujours pas utiliser la classe BackgroundSubtractorMOG2 et, pire encore, la classe de BackgroundSubtractorMOG est non déclarée.

La syntaxe a été modifiée depuis OpenCV 2.9.X. Cela fonctionnera dans OpenCV 3.0.0:

 #include  using namespace cv; using namespace std; int main() { VideoCapture video("1.avi"); Mat frame, mask, thresholdImage, output; int frameNum = 0; Ptr 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; }