summaryrefslogtreecommitdiffstats
path: root/face-detection.cpp
blob: 6c98b8bb158155cbf85a8ebc554a752520cafced (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
 
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;
}