簡単な顔と目の検出/追跡を実行できました。あまり正確ではありませんが、機能します。OpenCV ライブラリに、動いている目と顔の座標を抽出し、リアルタイムでコンソールに出力できる方法があるかどうか疑問に思っていました。または、これらの座標を出力ファイルに保存することもできます。
更新 (顔と目の検出のコード):
int detect( IplImage* img, const char* cascade_name )
{
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
int scale = 1;
int i;
IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );
//Load Cascade
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade!\n" );
return 0;
}
storage = cvCreateMemStorage(0);
cvClearMemStorage( storage );
int faceDetected = 0;
if( cascade )
{
//In case there is more than one face
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(40, 40) );
faceDetected = (faces ? faces->total : 0);
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
//Maybe this is where I get the coordinates?
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 over face
cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
}
}
cvReleaseImage( &temp );
return faceDetected;
}