顔認識プログラム(ファイル)

写真に写っている人物の顔を認識する




//
// 静止画ファイル(画像ファイル)の顔を認識する
//
//
#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;
}