📄 facedet.c
字号:
// facedet.c - by Robin Hewitt, 2007
// http://www.cognotics.com/opencv/downloads/camshift_wrapper
// This is free software. See License.txt, in the download
// package, for details.
//
#include "cv.h"
#include <stdio.h>
#include "facedet.h"
//#define STD_SIZE *cvSize(50,50)
// File-level variables
CvHaarClassifierCascade * pCascade = 0; // the face detector
CvMemStorage * pStorage = 0; // memory for detector to use
// memory-access interface
int i=0;
CvPoint pt1,pt2;
int scale=1;
//const char*DISPLAY_WINDOW="DisplayWindow";
//////////////////////////////////
// initFaceDet()
//
int initFaceDet(const char * haarCascadePath)
{
if( !(pStorage = cvCreateMemStorage(0)) )
{
fprintf(stderr, "Can\'t allocate memory for face detection\n");
return 0;
}
pCascade = (CvHaarClassifierCascade *)cvLoad( haarCascadePath, 0, 0, 0 );
if( !pCascade )
{
fprintf(stderr, "Can\'t load Haar classifier cascade from\n"
" %s\n"
"Please check that this is the correct path\n",
haarCascadePath);
return 0;
}
return 1;
}
//////////////////////////////////
// closeFaceDet()
//
void closeFaceDet()
{
if(pCascade) cvReleaseHaarClassifierCascade(&pCascade);
if(pStorage) cvReleaseMemStorage(&pStorage);
}
//////////////////////////////////
// detectFace()
//
CvRect * detectFace(IplImage * pImg)
{
// CvSeq*pFaceReqSeq;
CvRect* r = 0;
CvRect*pFaceRect=0;
IplImage*pFaceImg=0;
IplImage*pCopyImage=0;
// CvSeq*pFaceReqSeq;
// detect faces in image
//int minFaceSize = pImg->width / 5;
CvSeq*pFaceRectSeq = cvHaarDetectObjects
(pImg, pCascade, pStorage,
1.1, // increase search scale by 10% each pass
6, // require six neighbors
CV_HAAR_DO_CANNY_PRUNING, // skip regions unlikely to contain a face
cvSize(20,20));
// if one or more faces are detected, return the first one
/////////////////////////////////////////////////////////////////////
//loop number of faces found
for (i=0;i<(pFaceRectSeq?pFaceRectSeq->total:0);i++)
{
CvRect*r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
//Find Dimension of faces and scale if neccassary
pt1.x=r->x*scale;
pt2.x=(r->x+r->width)*scale;
pt1.y=r->y*scale;
pt2.y=(r->y+r->height)*scale;
//Draw rectangle in image
cvRectangle(pImg,pt1,pt2,CV_RGB(255,0,0),2,8,0);
/////////////////////////////////////////////////////////////////
//pFaceRect=(CvRect*)cvGetSeqElem(pFaceRectSeq,i);
cvSetImageROI(pImg,*r);
pFaceImg=
cvCreateImage(cvSize(50,50),IPL_DEPTH_8U,1);
//ImageCopy
pCopyImage=cvCloneImage(pImg);
cvResize(pCopyImage,pFaceImg,CV_INTER_AREA);
/////////////////////////////////////////////////////////////////
//pImg=pFaceImg + pImg//钦模弊覆阑 府畔
//PfaceImg历厘窍绊 eigenface俊 荤侩
}
//cvShowImage("DisplayWindow",pFaceImg);
/*for (i=0;i<(pFaceRectSeq?pFaceRectSeq->total:0);i++)
{
pFaceRect=(CvRect*)cvGetSeqElem(pFaceRectSeq,i);
cvSetImageROI(pImg,*pFaceRect);
pFaceImg=
cvCreateImage(cvSize(r->width,r->height),IPL_DEPTH_8U,1);
cvResize(pImg,pFaceImg,CV_INTER_AREA);
}*/
///////////////////////////////////////////////////////////////////////////////
return r;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -