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