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;
}
You need to properly initialize HOG params (cells, blocks, bins, ...) before calling setSVMDetector
But I saw lots of website just type like I did, shoudln't it be the default value of hog?
can you give us the exact error you're getting ?
(and your code works fine for me, (3.1, win, mingw))
can it be, you're accidentally mixing opencv debug / release libs with VS ?