#include #include #include int main(int argc, char **argv) { CvCapture *capture = 0; IplImage *frame = 0; IplImage *small = 0; int key = 0; capture = cvCreateCameraCapture(-1); if (!capture) { fprintf(stderr, "Webcam no bueno.\n"); return 1; } cvNamedWindow("Jason's Wonderful OpenCV Test", CV_WINDOW_AUTOSIZE); CvMemStorage* storage = cvCreateMemStorage(0); CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"); static CvScalar colors[] = {{{0, 255, 255}}, {{0, 128, 255}}, {{0, 255, 255}}, {{255, 0, 255}}}; while (key != 'q') { frame = cvQueryFrame(capture); if (!frame) break; small = cvCreateImage(cvSize(frame->width / 2, frame->height / 2), IPL_DEPTH_8U, 3); cvPyrDown(frame, small, CV_GAUSSIAN_5x5); cvClearMemStorage(storage); CvSeq* objects = cvHaarDetectObjects(small, cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(small->width / 8, small->height / 8)); cvReleaseImage(&small); CvRect* r; for (int i = 0; i < (objects ? objects->total : 0); ++i) { r = (CvRect*)cvGetSeqElem(objects, i); cvEllipse(frame, cvPoint(r->x * 2 + r->width, r->y * 2 + r->height), cvSize(r->width, r->height), 0, 0, 360, colors[i % 8], 2); } cvShowImage("Jason's Wonderful OpenCV Test", frame); key = cvWaitKey(1); } cvDestroyWindow("Jason's Wonderful OpenCV Test"); cvReleaseCapture(&capture); return 0; }