写真に写っている人物の顔を認識する
//
// 静止画ファイル(画像ファイル)の顔を認識する
//
//
#include "cv.h"
#include "highgui.h"
#ifdef _DEBUG //cv21
#pragma comment( lib, "cv210d.lib" )
#pragma comment( lib, "cxcore210d.lib" )
#pragma comment( lib, "cvaux210d.lib" )
#pragma comment( lib, "highgui210d.lib" )
#else
#pragma comment( lib, "cv210.lib" )
#pragma comment( lib, "cxcore210.lib" )
#pragma comment( lib, "cvaux210.lib" )
#pragma comment( lib, "highgui210.lib" )
#endif
int main(int argc, char* argv[])
{
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* faces;
int i;
// 画像の読み込み
char imgfile[] = "lena.jpg";
IplImage* image = cvLoadImage( imgfile, CV_LOAD_IMAGE_COLOR );
// 正面顔検出器の読み込み
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( "haarcascade_frontalface_default.xml" );
// 顔検出
faces = cvHaarDetectObjects( image, cascade, storage );
// 顔領域の描画
for( i = 0; i < faces->total; i++ )
{
CvRect face_rect = *(CvRect*)cvGetSeqElem( faces, i );
cvRectangle( image, cvPoint(face_rect.x,face_rect.y),
cvPoint((face_rect.x+face_rect.width), (face_rect.y+face_rect.height)), CV_RGB(0,0,255), 5 );
}
cvReleaseMemStorage( &storage ); // メモリストレージを解放
cvNamedWindow( "face_detect", 0 ); // ウインドウの生成
cvShowImage( "face_detect", image ); // 画像の表示
cvWaitKey(0); // キーが押されるまで待つ
cvDestroyWindow("capture_face_detect"); // ウィンドウの破棄
cvReleaseHaarClassifierCascade( &cascade ); // 顔検出器の解放
cvReleaseImage( &image ); // 画像メモリの解放
return 0;
}