--- /dev/null
+// FaceDetection.h: interface for the FaceDetection class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef _CVFACEDETECTION_H_
+#define _CVFACEDETECTION_H_
+
+#include "cvfacetemplate.h"
+#include "cvface.h"
+#include "cvboostingtemplate.h"
+
+typedef struct CvContourRect
+{
+ int iNumber; //ïîðÿäêîâûé íîìåð àòðèáóòà
+ int iType; //òèï îáúåêòà
+ int iFlags; //ñâîáîäíîå ïîëå
+ CvSeq *seqContour; //àäðåñ íà÷àëà çàïèñè îáúåêòà
+ int iContourLength; //äëèíà çàïèñè âåêòîðîâ
+ CvRect r; //îïèñàíûé ïðÿìîóãîëüíèê
+ CvPoint pCenter; // center of rect
+ int iColor;// öâåò çàïîëíåíèÿ êîíòóðà
+} CvContourRect;
+
+//class Face;
+
+class ListElem
+{
+public:
+ ListElem();
+ ListElem(Face * pFace,ListElem * pHead);
+ virtual ~ListElem();
+ ListElem * m_pNext;
+ ListElem * m_pPrev;
+ Face * m_pFace;
+};//class ListElem
+
+class List
+{
+public:
+ List();
+ int AddElem(Face * pFace);
+ virtual ~List();
+ Face* GetData();
+ long m_FacesCount;
+private:
+ ListElem * m_pHead;
+ ListElem * m_pCurElem;
+};//class List
+
+
+class FaceDetection
+{
+public:
+ void FindFace(IplImage* img);
+ void CreateResults(CvSeq * lpSeq);
+ FaceDetection();
+ virtual ~FaceDetection();
+ void SetBoosting(bool bBoosting) {m_bBoosting = bBoosting;}
+ bool isPostBoosting() {return m_bBoosting;}
+protected:
+
+ IplImage* m_imgGray;
+ IplImage* m_imgThresh;
+ int m_iNumLayers;
+ CvMemStorage* m_mstgContours;
+ CvSeq* m_seqContours[MAX_LAYERS];
+ CvMemStorage* m_mstgRects;
+ CvSeq* m_seqRects;
+
+ bool m_bBoosting;
+ List * m_pFaceList;
+
+protected:
+ void ResetImage();
+ void FindContours(IplImage* imgGray);
+ void AddContours2Rect(CvSeq* seq, int color, int iLayer);
+ void ThresholdingParam(IplImage* imgGray, int iNumLayers, int& iMinLevel, int& iMaxLevel, int& iStep);
+ void FindCandidats();
+ void PostBoostingFindCandidats(IplImage * FaceImage);
+};
+
+inline void ReallocImage(IplImage** ppImage, CvSize sz, long lChNum)
+{
+ IplImage* pImage;
+ if( ppImage == NULL )
+ return;
+ pImage = *ppImage;
+ if( pImage != NULL )
+ {
+ if (pImage->width != sz.width || pImage->height != sz.height || pImage->nChannels != lChNum)
+ cvReleaseImage( &pImage );
+ }
+ if( pImage == NULL )
+ pImage = cvCreateImage( sz, IPL_DEPTH_8U, lChNum);
+ *ppImage = pImage;
+};
+
+
+
+#endif // !defined(AFX_FACEDETECTION_H__55865033_D8E5_4DD5_8925_34C2285BB1BE__INCLUDED_)