2016-03-19 23 views
1

Kodumda sorun yaşıyorum.Hata ayıklama onaylama işlemi başarısız oldu Opencv işlevi

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

ve benim fonksiyondur: Ben Visual Studio üzerinde OpenCV 3.0 ile arka plan çıkarma yürütmek deneyin 2015 fonksiyon ana olan bu işlev ben bu hata var erdi

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

Yardımcı olabilir misiniz?

+1

Opencv Visual Studio 14 2015 kullanılarak oluşturuldu mu? – drescherjm

+0

evet, görsel stüdyosu ile cmake kullanıyorum 14 2015 –

cevap

0

bu hatanın bir cevabı değildir, ancak main işlevinizde createBackgroundSubtractorKNN işlevini oluşturmalı ve apply_BackgroundSubstraction işlevinize iletmelisiniz.

Test kodum VS 2015 ile derlendi ve iyi çalışıyor.

#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

tamam teşekkürler deniyorum ama aynı hata var :(problem apply_BackgroundSubstraction işlevi sona erdiğinde! :( –

+0

VS yapılandırmanız hakkında bir sorun olduğunu düşünüyorum. – sturkmen

İlgili konular