2016-05-31 82 views
0

我是使用HOG检测器在路上检测人类的新手段,我已经编写了代码并尝试运行它,但它总是在这一行上有错误:“猪.setSVMDetector(HOGDescriptor :: getDefaultPeopleDetector());”这一行,任何人都可以告诉我我的代码有什么问题吗?使用HOG描述符进行人体检测

#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

它说:“异常情况:0xC0000005:读取0xFFFFFFFFFFFF违规” – HenryChen

+0

我不知道是否有任何进一步的步骤我需要做,如“getDefaultPeopleDetector()”需要初始化或什么? – HenryChen

回答

1

一般来说,你不应该在C++程序中包含.cpp文件。有.h和.hpp标题。

现在,对于您的特定问题,如果我们讨论的是相同的peopledetect.cpp,那么您所需要的函数没有在那里定义,而是包含在其中的头文件中...您可能已经有了正确的头文件(objdetect。 hpp)所以只需删除#include <peopledetect.cpp>

+0

但删除cpp文件后,错误仍然存​​在,我的输入格式有什么问题吗? – HenryChen

+0

@HenryChen仍然在同一行上的错误? – Sunreef

+0

是的,它与使用getDefaultPeopleDetector()完全相同 – HenryChen