⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 facedet.c

📁 face detecting source code very fast
💻 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 + -