2016-03-19 15 views
1

私のコードに問題があります。デバッグアサーション失敗Opencv関数

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; 
} 

と私の機能は次のとおりです:私は、Visual Studio上でのOpenCV 3.0で背景substractionを実行しようと2015年main関数があり、この機能は、私はこのエラーを持って終了し

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; 
    } 
} 

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

お手伝いできますか?

+1

Visual Studio 14 2015を使用してopencvをビルドしましたか? – drescherjm

+0

はい、私はビジュアルスタジオでCMakeを使用しています14 2015 –

答えて

0

これはエラーではありませんが、main機能にcreateBackgroundSubtractorKNNを作成し、apply_BackgroundSubstraction関数に渡す必要があります。

私のテストコードはVS 2015でコンパイルされ、うまく動作します。

#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ありがとう、私は同じエラーがあります:(問題は、apply_BackgroundSubstractionが終了したときです!): –

+0

あなたのVS設定についての問題があると思います。 – sturkmen

関連する問題