Using OpenCV - Adaboost ( Face Detection )
//================================================================= //=== Face Detection === //================================================================= IplImage* runFaceDetection(void) { IplImage* tempFrame = cvCreateImage( cvGetSize( iplSrc ) , IPL_DEPTH_8U , iplSrc->nChannels ); //--------------------------------------------------------- CvHaarClassifierCascade* classifier = (CvHaarClassifierCascade*) cvLoad( StringToChar( filename ) , 0, 0, 0); //--------------------------------------------------------- if( !classifier) { cvZero( tempFrame ); return tempFrame; } //--------------------------------------------------------- CvMemStorage* facesMemStorage = cvCreateMemStorage(0); //--------------------------------------------------------- if( iplSrc->origin == IPL_ORIGIN_TL ) cvCopy(iplSrc, tempFrame, 0); else cvFlip(iplSrc, tempFrame, 0); //--------------------------------------------------------- cvClearMemStorage( facesMemStorage ); //--------------------------------------------------------- CvSeq* faces = cvHaarDetectObjects( tempFrame, classifier, facesMemStorage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(INT_MIN_FACE_WIDTH, INT_MIN_FACE_HEIGHT) ); //--------------------------------------------------------- if( faces ) for(int i=0;i<faces->total;i++) { CvRect* rectangle = (CvRect*) cvGetSeqElem( faces , i ); cvRectangle( tempFrame , cvPoint( rectangle->x , rectangle->y ) , cvPoint( rectangle->x + rectangle->width , rectangle->y + rectangle->height ) , CV_RGB(255,0,0) , 2 , 8 , 0); } //--------------------------------------------------------- cvReleaseMemStorage( & facesMemStorage ); cvReleaseHaarClassifierCascade( & classifier ); //--------------------------------------------------------- return tempFrame; }
Output
文章標籤
全站熱搜