2016-05-31 9 views
0

Ich bin neu für die Verwendung von HOG-Detektor, um Menschen auf der Straße zu erkennen, und ich habe bereits den Code schreiben und versuchen, es auszuführen, aber es immer den Fehler auf dieser Zeile: "Schwein .setSVMDetector (HOGDescriptor :: getDefaultPeopleDetector()); " In dieser Zeile kann mir jemand sagen, was mit meinem Code nicht stimmt?Human Detection mit HOG Descriptor

#include < stdio.h> 
    #include < iostream> 
    #include < opencv2\opencv.hpp> 
    #include < opencv2/core/core.hpp> 
    #include < opencv2/highgui/highgui.hpp> 
    #include < opencv2/video/background_segm.hpp> 
    #include <opencv2/imgproc.hpp> 
    #include <opencv2/objdetect.hpp> 
    #include <peopledetect.cpp> 

    using namespace cv; 
    using namespace std; 

    int main(int argc, const char * argv[]) 
    { 
     VideoCapture cap(0); 
     cap.set(CV_CAP_PROP_FRAME_WIDTH, 320); 
     cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240); 

     if (!cap.isOpened()) 
      return -1; 

     Mat img; 
     namedWindow("opencv", CV_WINDOW_AUTOSIZE); 
     HOGDescriptor hog; 
     hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); 

     while (true) 
     { 
      cap >> img; 
      if (img.empty()) 
       continue; 

      vector<Rect> found, found_filtered; 
      hog.detectMultiScale(img, found, 0, Size(8, 8), Size(32, 32), 1.05, 2); 
      size_t i, j; 
      for (i = 0; i<found.size(); i++) 
      { 
       Rect r = found[i]; 
       for (j = 0; j<found.size(); j++) 
        if (j != i && (r & found[j]) == r) 
         break; 
       if (j == found.size()) 
        found_filtered.push_back(r); 
      } 

      for (i = 0; i<found_filtered.size(); i++) 
      { 
       Rect r = found_filtered[i]; 
       r.x += cvRound(r.width*0.1); 
       r.width = cvRound(r.width*0.8); 
       r.y += cvRound(r.height*0.07); 
       r.height = cvRound(r.height*0.8); 
       rectangle(img, r.tl(), r.br(), Scalar(0, 255, 0), 3); 
      } 

      imshow("opencv", img); 
      waitKey(1); 
     } 
     return 0; 
    } 
+0

Jeder Fehler insbesondere? System fängt Feuer? Nasale Anwälte? –

+0

es heißt "Ausnahmesituation auf: 0xC0000005: Lesen 0xFFFFFFFFFFFF Verletzung" – HenryChen

+0

Ich weiß nicht, ob es einen weiteren Schritt muss ich tun, wie wenn die "getDefaultPeopleDetector()" zuerst initialisiert werden muss oder was? – HenryChen

Antwort

1

Im Allgemeinen sollten Sie keine .cpp-Dateien in einem C++ - Programm enthalten. Dafür gibt es .h und .hpp-Header.

Nun, für Ihr spezielles Problem, wenn wir über die gleiche peopledetect.cpp sprechen, ist die gewünschte Funktion nicht dort definiert, aber in einem Header enthalten ... Sie haben wahrscheinlich bereits die richtige Kopfzeile (Objdetect. hpp) so entfernen Sie einfach die #include <peopledetect.cpp> Zeile

+0

aber nach dem Entfernen der CPP-Datei, ist der Fehler immer noch da, gibt es etwas falsch mit meinem Eingabeformat? – HenryChen

+0

@HenryChen immer noch der gleiche Fehler in der gleichen Zeile? – Sunreef

+0

Ja, es ist genau das gleiche – HenryChen