opencv实现人脸检测

来源:互联网 发布:mac安装ipad应用 编辑:程序博客网 时间:2024/06/11 06:19
人脸检测原理就不多说了,不懂得话百度一下,资料很多。下面是opencv的实现代码
// 人脸检测_1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "cv.h"#include "highgui.h"#include <stdio.h>void displaydetection(IplImage* pInpImg,CvSeq* pFaceRectSeq,char* FileName);double scale=1.2; int main(int argc,char** argv){IplImage* pInpImg=0;CvHaarClassifierCascade* pCascade=0;//指向后面从文件中加载的分类器CvMemStorage* pStorage=0;//存储检测到的人脸数据CvSeq* pFaceRectSeq;//用来接收检测函数返回的一系列的包含人脸的矩形区域//初始化pInpImg=cvLoadImage("e:\\picture\\renlian.jpg");pStorage=cvCreateMemStorage(0);//创建默认大小为64k的动态内存区域pCascade=(CvHaarClassifierCascade*)cvLoad("D:\\Program Files\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml",0,0,0);//加载分类器if (!pCascade){fprintf( stderr, "ERROR: Could not load classifier cascade\n" );         return -1; }IplImage* gray = cvCreateImage(cvSize(pInpImg->width,pInpImg->height),8,1);     IplImage* small_img=cvCreateImage(cvSize(cvRound(pInpImg->width/scale),cvRound(pInpImg->height/scale)),8,1);     cvCvtColor(pInpImg,gray, CV_BGR2GRAY);     cvResize(gray, small_img, CV_INTER_LINEAR);    cvEqualizeHist(small_img,small_img); //直方图均衡化//人脸检测pFaceRectSeq=cvHaarDetectObjects(small_img,pCascade,pStorage,scale,2,CV_HAAR_DO_CANNY_PRUNING,cvSize(30,30));//将检测到的人脸以矩形框标出。displaydetection(pInpImg,pFaceRectSeq,argv[1]);cvReleaseImage(&pInpImg);cvReleaseHaarClassifierCascade(&pCascade);cvReleaseMemStorage(&pStorage);return 0;}void displaydetection(IplImage* pInpImg,CvSeq* pFaceRectSeq,char* FileName){int i;cvNamedWindow("haar window",1);printf("the number of face is %d",pFaceRectSeq->total);for (i=0;i<(pFaceRectSeq?pFaceRectSeq->total:0);i++){CvRect* r=(CvRect*)cvGetSeqElem(pFaceRectSeq,i);CvPoint pt1={r->x*scale,r->y*scale};CvPoint pt2={(r->x+r->width)*scale,(r->y+r->height)*scale};cvRectangle(pInpImg,pt1,pt2,CV_RGB(0,255,0),3,4,0);}cvShowImage("haar window",pInpImg);cvWaitKey(0);cvDestroyWindow("haar window");}

运行结果:


0 0
原创粉丝点击