Ask Your Question

Revision history [back]

Error using setSVMDetector of HOGDescriptor

Hi everyone, I'm new using HOGDescriptor, and I find out as long as the code runs to this line:

      hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

there code will be interrupted and show an error about "un-dealing situation" and "violation".

I don't know if there is any further step I need to do on "getDefaultPeopleDetector()" or anything else ?

Here is my whole code:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, const char * argv[])
{
VideoCapture cap("D:\\DataBox\\VIDEO\\withbackground.mov");
cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
if (!cap.isOpened())
    return -1;

Mat img;
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

namedWindow("video capture", CV_WINDOW_AUTOSIZE);
while (true)
{
    cap >> img;
    if (!img.data)
        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.06);
        r.height = cvRound(r.height*0.9);
        rectangle(img, r.tl(), r.br(), cv::Scalar(0, 255, 0), 2);
    }
    imshow("video capture", img);
    waitKey(1);
}
return 0;

}