您的位置:首页 > 运维架构

opencv实现人脸检测

2014-07-28 12:36 429 查看
人脸检测原理就不多说了,不懂得话百度一下,资料很多。下面是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");
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: