You can also display the detections as ellipses and circles:
void detectAndDisplay( Mat frame ,int i)
{
std::vector<Rect> faces;
Mat frame_gray;
cvtColor( frame, frame_gray, CV_BGR2GRAY );
equalizeHist( frame_gray, frame_gray );
//-- Detect faces
//face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 1, 0|CV_HAAR_SCALE_IMAGE, Size(20, 20) );
for( size_t i = 0; i < faces.size(); i++ )
{
Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
Mat faceROI = frame_gray( faces[i] );
std::vector<Rect> eyes;
//-- In each face, detect eyes
//eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );
for( size_t j = 0; j < eyes.size(); j++ )
{
Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
}
}
//-- Show what you got
//imshow( window_name, frame );
char filename[512];
sprintf(filename,"C:\\out\\image%d.jpg",i);
imwrite(filename,frame);
}
it outputs the shape it was trained on, a square in the face case, a rectangle for mouth.(you can look into the xml file, it's right at the top)
but ofc, nobody said, that your application has to use exactly that. makes quite sense sometimes to crop or elongate that (i.e, out-of-the-box, it cuts off quite a lot of chin)
also, don't forget, you can train your own ..
Are you referring the the output ROI or the way it is marked on the screen (square vs. rectangle)?
the output roi in the 1st part, how/what to draw in the 2nd
Yes, I'm just not sure what he is asking about.
ahww, keep your answer, it was nice
and i'm not sure what he meant , either.
Thanks @berak.
By the way, I'm working on adding BinBoost (a new binary descriptor) to OpenCV. How can I find out if there is someone who is trying to do the same? I don't want to work for nothing.
oh, cool, i'll happily give it a try ;)
if you mean: "do the same thing in opencv" - does not look like there's anyone doing that.
(from looking at pull requests/issues/activity logs )
no idea , how far you are, but you could try a test balloon and make a feature request on the issues page
oh, wait found this , but no idea what to make of it
Actually, I've seen the thread you linked to when I googled binboost opencv.
I think I'm halfway there. I managed to extract descriptors by calling BGMDescriptorExtractor1.compute(imgK, kp, desc); But I also need to add it to the generic interface "DescriptorExtractor::create(descriptor_name);".
Also, it will be extremely helpful if someone could review my code. I'm not that proficient in C++.
Also, I need to run an evaluation on the Brown dataset to check that it's working.
again, happy to help ;)