2016-03-19 16 views
1

Ich habe ein Problem mit meinem Code. Ich versuche, einen Hintergrund Substraktion mit opencv 3.0 auf Visual Studio 2015. Die Funktion main auszuführen ist:Debug Assertion fehlgeschlagen Opencv Funktion

int main() 
{ 

//altrimento creo la finestra 
    Mat image; 
    Mat fgMaskMOG2; 
    Rect mr; 
    Ptr<BackgroundSubtractor> pKNN; 
    //imposto la sequenza delle immagini 
    std::string path = "D:\\ProjectFile\\CoreSaw_DataFusion\\Dataset\\Persona posa oggetto\\gray-%06d.jpg"; 
    VideoCapture sequence(path); 

    //se non è aperto esco con codice di errore 
    if (!sequence.isOpened()) 
    { 
     cerr << "Failed to open Image Sequence!\n" << endl; 
     return 1; 
    } 
    for (;;) 
    { 
     //scelgo l'immagine seguente 
     sequence >> image; 
     resize(image, image, Size(400,400)); 
     //ridimensiono l'immagine perchè permette una miglior rilevazione 
     //se vuota finisco la sequenza 
     if (image.empty()) 
     { 
      cout << "End of Sequence" << endl; 
      break; 
     } 
     try 
     { 
      apply_BackgroundSubstraction(image, fgMaskMOG2); 
     } 
     catch (Exception exc) 
     { 
      cerr << "Main: " << exc.msg << endl; 
     } 
     waitKey(1); 
    } 
    return 0; 
} 

und meine Funktion ist:

void apply_BackgroundSubstraction(Mat image, Mat fgMask) 
{ 

    vector< vector<Point> > contours; 
    try 
    { 
     namedWindow("Display window");// Create a window for display. 
     Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN(216, 3500.0, true); 
     pKNN->apply(image, fgMask); //applico l'algoritmo di background substraction 
     Mat contourImg = fgMask.clone(); 
     findContours(contourImg, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); 
     vector<vector< Point> >::iterator itc = contours.begin(); 
     while (itc != contours.end()) { 

      Rect rect = boundingRect(Mat(*itc)); 
      rectangle(image, rect, CV_RGB(255, 0, 0)); 
      itc++; 
     } 
     imshow("Display window", fgMask); 
     imshow("Blob", image); 
    } 
    catch (Exception exc) 
    { 
     cerr << "apply_BackgroundSubstraction: " << exc.msg << endl; 
    } 
} 

, wenn diese Funktion beendet, ich habe diesen Fehler

DEBUG ASSERTION FAILDED : IS BLOCK_TYPE_VALID(HEADER->BLOCK_USE)

können Sie mir helfen?

+1

Wurde opencv mit Visual Studio 14 2015 erstellt? – drescherjm

+0

ja, ich benutze cmake mit Visual Studio 14 2015 –

Antwort

0

es ist keine Antwort auf den Fehler, aber Sie sollten createBackgroundSubtractorKNN in Ihrer main Funktion erstellen und an Ihre apply_BackgroundSubstraction Funktion übergeben.

mein Testcode ist mit VS 2015 kompiliert und funktioniert gut.

#include <opencv2/imgproc.hpp> 
#include <opencv2/highgui.hpp> 
#include<opencv2/objdetect/objdetect.hpp> 
#include "opencv2/video/background_segm.hpp" 
#include<iostream> 

using namespace cv; 
using namespace std; 

void apply_BackgroundSubstraction(Ptr<BackgroundSubtractor> pKNN, Mat image, Mat fgMask) 
{ 

    vector< vector<Point> > contours; 
    try 
    { 
     namedWindow("Display window");// Create a window for display. 
     pKNN->apply(image, fgMask); //applico l'algoritmo di background substraction 
     Mat contourImg = fgMask.clone(); 
     findContours(contourImg, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); 
     vector<vector< Point> >::iterator itc = contours.begin(); 
     while (itc != contours.end()) { 

      Rect rect = boundingRect(Mat(*itc)); 
      rectangle(image, rect, CV_RGB(255, 0, 0)); 
      itc++; 
     } 
     imshow("Display window", fgMask); 
     imshow("Blob", image); 
    } 
    catch (Exception exc) 
    { 
     cout << "apply_BackgroundSubstraction: " << exc.msg << endl; 
    } 
} 

int main(int argc, char** argv) 
{ 
    char* filename = argc >= 2 ? argv[1] : (char*)"768x576.avi"; 
    VideoCapture capture(filename); 

    Mat frame,output; 
    Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN(216, 3500.0, true); 

    while(true) 
    { 
     capture.read(frame); 
     if (!frame.data) 
      return 0; 

     apply_BackgroundSubstraction(pKNN, frame, output); 

     if(waitKey(1)==27) 
     { 
      break; 
     } 
    } 
    return 0; 
} 
+0

ok danke, ich versuche, aber ich habe den gleichen Fehler :(Das Problem ist, wenn die Funktion apply_BackgroundSubstraction beendet! :( –

+0

ich denke, Sie haben ein Problem über Ihre VS-Konfiguration. – sturkmen

Verwandte Themen