您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 面部识别代码(C语言)
#includecv.h#includehighgui.h#includestdio.h#includestdlib.h#includestring.h#includeassert.h#includemath.h#includefloat.h#includelimits.h#includetime.h#includectype.h#ifdef_EiC#defineWIN32#endifstaticCvMemStorage*storage=0;staticCvHaarClassifierCascade*cascade=0;voiddetect_and_draw(IplImage*image);constchar*cascade_name=haarcascade_frontalface_alt.xml;/*haarcascade_profileface.xml;*/intmain(intargc,char**argv){CvCapture*capture=0;IplImage*frame,*frame_copy=0;intoptlen=strlen(--cascade=);constchar*input_name;if(argc1&&strncmp(argv[1],--cascade=,optlen)==0){cascade_name=argv[1]+optlen;input_name=argc2?argv[2]:0;}else{cascade_name=../../data/haarcascades/haarcascade_frontalface_alt2.xml;//opencv装好后haarcascade_frontalface_alt2.xml的路径,//也可以把这个文件拷到你的工程文件夹下然后不用写路径名cascade_name=haarcascade_frontalface_alt2.xml;//或者cascade_name=C:\\ProgramFiles\\OpenCV\\data\\haarcascades\\haarcascade_frontalface_alt2.xmlinput_name=argc1?argv[1]:0;}cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0);if(!cascade){fprintf(stderr,ERROR:Couldnotloadclassifiercascade\n);fprintf(stderr,Usage:facedetect--cascade=\cascade_path\[filename|camera_index]\n);return-1;}storage=cvCreateMemStorage(0);if(!input_name||(isdigit(input_name[0])&&input_name[1]=='\0'))capture=cvCaptureFromCAM(!input_name?0:input_name[0]-'0');elsecapture=cvCaptureFromAVI(input_name);cvNamedWindow(result,1);if(capture){for(;;){if(!cvGrabFrame(capture))break;frame=cvRetrieveFrame(capture);if(!frame)break;if(!frame_copy)frame_copy=cvCreateImage(cvSize(frame-width,frame-height),IPL_DEPTH_8U,frame-nChannels);if(frame-origin==IPL_ORIGIN_TL)cvCopy(frame,frame_copy,0);elsecvFlip(frame,frame_copy,0);detect_and_draw(frame_copy);if(cvWaitKey(10)=0)break;}cvReleaseImage(&frame_copy);cvReleaseCapture(&capture);}else{constchar*filename=input_name?input_name:(char*)lena.jpg;IplImage*image=cvLoadImage(filename,1);if(image){detect_and_draw(image);cvWaitKey(0);cvReleaseImage(&image);}else{/*assumeitisatextfilecontainingthelistoftheimagefilenamestobeprocessed-oneperline*/FILE*f=fopen(filename,rt);if(f){charbuf[1000+1];while(fgets(buf,1000,f)){intlen=(int)strlen(buf);while(len0&&isspace(buf[len-1]))len--;buf[len]='\0';image=cvLoadImage(buf,1);if(image){detect_and_draw(image);cvWaitKey(0);cvReleaseImage(&image);}}fclose(f);}}}cvDestroyWindow(result);return0;}voiddetect_and_draw(IplImage*img){staticCvScalarcolors[]={{{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},{{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}}};doublescale=1.3;IplImage*gray=cvCreateImage(cvSize(img-width,img-height),8,1);IplImage*small_img=cvCreateImage(cvSize(cvRound(img-width/scale),cvRound(img-height/scale)),8,1);inti;cvCvtColor(img,gray,CV_BGR2GRAY);cvResize(gray,small_img,CV_INTER_LINEAR);cvEqualizeHist(small_img,small_img);cvClearMemStorage(storage);if(cascade){doublet=(double)cvGetTickCount();CvSeq*faces=cvHaarDetectObjects(small_img,cascade,storage,1.1,2,0/*CV_HAAR_DO_CANNY_PRUNING*/,cvSize(30,30));t=(double)cvGetTickCount()-t;printf(detectiontime=%gms\n,t/((double)cvGetTickFrequency()*1000.));for(i=0;i(faces?faces-total:0);i++){CvRect*r=(CvRect*)cvGetSeqElem(faces,i);CvPointcenter;intradius;center.x=cvRound((r-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);cvCircle(img,center,radius,colors[i%8],3,8,0);}}cvShowImage(result,img);cvReleaseImage(&gray);cvReleaseImage(&small_img);}
本文标题:面部识别代码(C语言)
链接地址:https://www.777doc.com/doc-6470419 .html