《face识别 opencv程序》由会员分享,可在线阅读,更多相关《face识别 opencv程序(7页珍藏版)》请在金锄头文库上搜索。
1、#include opencv2/objdetect/objdetect.hpp#include opencv2/highgui/highgui.hpp#include opencv2/imgproc/imgproc.hpp#include #include #include #include using namespace std;using namespace cv;static void help()cout this is the primary trained classifier such as frontal facen -nested-cascade=nested_cascad
2、e_path this an optional secondary classifier such as eyesn -scale=n -try-flipn filename|camera_indexnnsee facedetect.cmd for one call:n./facedetect -cascade=././data/haarcascades/haarcascade_frontalface_alt.xml -nested-cascade=././data/haarcascades/haarcascade_eye.xml -scale=1.3nnDuring execution:nt
3、Hit any key to quit.ntUsing OpenCV version origin = IPL_ORIGIN_TL )frame.copyTo( frameCopy );elseflip( frame, frameCopy, 0 );detectAndDraw( frameCopy, cascade, nestedCascade, scale, tryflip );if( waitKey( 10 ) = 0 )goto _cleanup_;waitKey(0);_cleanup_:cvReleaseCapture( elsecout 0 & isspace(buflen-1)
4、)len-;buflen = 0;cout faces, faces2;const static Scalar colors = CV_RGB(0,0,255),CV_RGB(0,128,255),CV_RGB(0,255,255),CV_RGB(0,255,0),CV_RGB(255,128,0),CV_RGB(255,255,0),CV_RGB(255,0,0),CV_RGB(255,0,255) ;Mat gray, smallImg( cvRound (img.rows/scale), cvRound(img.cols/scale), CV_8UC1 );cvtColor( img,
5、gray, CV_BGR2GRAY );resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );equalizeHist( smallImg, smallImg );t = (double)cvGetTickCount(); cascade.detectMultiScale( smallImg, faces,1.1, 2, 0/|CV_HAAR_FIND_BIGGEST_OBJECT/|CV_HAAR_DO_ROUGH_SEARCH|CV_HAAR_SCALE_IMAGE,Size(30, 30) );if( tryflip
6、)flip(smallImg, smallImg, 1);cascade.detectMultiScale( smallImg, faces2,1.1, 2, 0/|CV_HAAR_FIND_BIGGEST_OBJECT/|CV_HAAR_DO_ROUGH_SEARCH|CV_HAAR_SCALE_IMAGE,Size(30, 30) );for( vector:const_iterator r = faces2.begin(); r != faces2.end(); r+ )faces.push_back(Rect(smallImg.cols - r-x - r-width, r-y, r-
7、width, r-height);t = (double)cvGetTickCount() - t;printf( detection time = %g msn, t/(double)cvGetTickFrequency()*1000.) );for( vector:const_iterator r = faces.begin(); r != faces.end(); r+, i+ )Mat smallImgROI;vector nestedObjects;Point center;Scalar color = colorsi%8;int radius;double aspect_ratio
8、 = (double)r-width/r-height;if( 0.75 x + r-width*0.5)*scale);center.y = cvRound(r-y + r-height*0.5)*scale);radius = cvRound(r-width + r-height)*0.25*scale);circle( img, center, radius, color, 3, 8, 0 );elserectangle( img, cvPoint(cvRound(r-x*scale), cvRound(r-y*scale),cvPoint(cvRound(r-x + r-width-1
9、)*scale), cvRound(r-y + r-height-1)*scale), color, 3, 8, 0);if( nestedCascade.empty() )continue;smallImgROI = smallImg(*r);nestedCascade.detectMultiScale( smallImgROI, nestedObjects,1.1, 2, 0/|CV_HAAR_FIND_BIGGEST_OBJECT/|CV_HAAR_DO_ROUGH_SEARCH/|CV_HAAR_DO_CANNY_PRUNING|CV_HAAR_SCALE_IMAGE,Size(30,
10、 30) );for( vector:const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr+ )center.x = cvRound(r-x + nr-x + nr-width*0.5)*scale);center.y = cvRound(r-y + nr-y + nr-height*0.5)*scale);radius = cvRound(nr-width + nr-height)*0.25*scale);circle( img, center, radius, color, 3, 8, 0 );cv:imshow( result, img );