Last active
December 16, 2015 12:08
-
-
Save royguo/5432132 to your computer and use it in GitHub Desktop.
human face detection
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <opencv2/opencv.hpp> // for highgui, core etc. | |
| using namespace cv; | |
| // cascade : classifier using to detect haar objects. | |
| // storage : memory to store detected objects. | |
| void DetectAndDraw(CvHaarClassifierCascade* cascade, | |
| CvMemStorage* storage, | |
| IplImage* img, | |
| double scale = 1.3) { | |
| static CvScalar colors[] = { | |
| {{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}}, | |
| {{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}} | |
| }; // Just some pretty colors to draw angles. | |
| printf("Detecting objects ... \n"); | |
| // Detect Objects | |
| cvClearMemStorage(storage); | |
| CvSeq* objects = cvHaarDetectObjects( | |
| img, | |
| cascade, | |
| storage, | |
| scale, | |
| 2, | |
| 0, | |
| cvSize(30, 30) | |
| ); | |
| printf("%d objects found !\n", objects ? objects->total:0); | |
| // Loop found objects and draw angles around them. | |
| for(int i=0; i<(objects ? objects->total:0); i++) { | |
| printf("drawing...\n"); | |
| CvRect* r = (CvRect*)cvGetSeqElem(objects, i); | |
| cvRectangle( | |
| img, | |
| cvPoint(r->x, r->y), | |
| cvPoint(r->x + r->width, r->y + r->height), | |
| colors[i%8] | |
| ); | |
| } | |
| cvNamedWindow("Example"); | |
| cvShowImage("Example", img); | |
| cvWaitKey(0); | |
| cvDestroyWindow("Example"); | |
| } | |
| int main( int argc, char** argv ) | |
| { | |
| CvMemStorage* storage = cvCreateMemStorage(0); | |
| const char* cascade_name = "haarcascade_frontalface_alt2.xml"; | |
| CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0); | |
| if (!cascade) { | |
| printf("Load cascade failed !\n"); | |
| exit(-1); | |
| } | |
| IplImage* img = cvLoadImage(argv[1]); | |
| DetectAndDraw(cascade, storage, img); | |
| // Release allocated memory. | |
| cvReleaseMemStorage(&storage); | |
| cvReleaseImage(&img); | |
| cvReleaseHaarClassifierCascade(&cascade); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment