カメラから動画を読み取り、顔検出して表示
メモ。
精度が皆無と言っていいほどだけど。
#include <stdio.h> #include "cv.h" #include "highgui.h" int main( int argc, char* argv[] ) { int key; CvCapture* capture = NULL; IplImage* captureImage = NULL; IplImage* outputImage = NULL; if( NULL ==(capture = cvCaptureFromCAM(-1)) ){ fprintf( stderr, "カメラが見つかりません。\n" ); return -1; } char* captureWindow = "Capture"; char* outputWindow = "Output"; CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_default.xml"); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* faces; cvNamedWindow( captureWindow, CV_WINDOW_AUTOSIZE ); cvNamedWindow( outputWindow, CV_WINDOW_AUTOSIZE ); while(1){ captureImage = cvQueryFrame(capture); outputImage = cvCloneImage(captureImage); faces = cvHaarDetectObjects( captureImage, cascade, storage ); int i; for( i = 0; i < faces->total; i++ ){ CvRect face_rect = *(CvRect*)cvGetSeqElem( faces, i ); cvRectangle( outputImage, cvPoint(face_rect.x,face_rect.y), cvPoint(face_rect.x+face_rect.width,face_rect.y+face_rect.height), CV_RGB(255,0,0), 3 ); } cvShowImage( captureWindow, captureImage ); cvShowImage( outputWindow, outputImage ); key = cvWaitKey(1); if( key == 0x1b ) break; } cvReleaseCapture(&capture); cvReleaseImage(&captureImage); cvReleaseImage(&outputImage); cvDestroyWindow(captureWindow); cvDestroyWindow(outputWindow); return 0; }