カメラから動画を読み取り、顔検出して表示

メモ。
精度が皆無と言っていいほどだけど。

#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;
}