とりあえず、Webカムからリアルタイムに画像取得→画像から顔認識して顔部分の色を変化させる、くらいまでは簡単に出来た。
※左がカメラキャプチャした元画像、右が顔認識した部分の色を変化させたもの
一応下に使用したC++のソースを載せておく。
#include <cv.h>
#include <highgui.h>
#include <ctype.h>
int main (int argc, char **argv)
{
CvCapture *capture = 0;
IplImage *frame = 0;
IplImage *out = 0;
double w = 320, h = 240;
int c;
if (argc == 1 || (argc == 2 && strlen (argv[1]) == 1 && isdigit (argv[1][0])))
capture = cvCreateCameraCapture (argc == 2 ? argv[1][0] - '0' : 0);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h);
CvHaarClassifierCascade* cascade = cvLoadHaarClassifierCascade( "C:/OpenCV2.0/data/haarcascades/haarcascade_frontalface_default.xml",cvSize(1,1));
CvMemStorage* storage = cvCreateMemStorage(0);
cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Face detection", CV_WINDOW_AUTOSIZE);
while (1) {
frame = cvQueryFrame (capture);
cvShowImage ("Capture", frame);
out = frame;
CvSeq* objects = cvHaarDetectObjects(
frame,
cascade,
storage,
1.1,
2,
0,
cvSize(30,30));
for(int i = 0;i < (objects ? objects->total : 0);i++){
CvRect* r = (CvRect*) cvGetSeqElem(objects,i);
cvSetImageROI(out,cvRect(r->x,r->y,r->width,r->height));
cvAddS(out,cvScalar(200),out);
cvResetImageROI(out);
}
cvShowImage("Face detection",out);
c = cvWaitKey (2);
if (c == '\x1b')
break;
}
cvReleaseCapture (&capture);
cvDestroyWindow ("Capture");
cvDestroyWindow ("Face detection");
return 0;
}
※おまけ
お約束。
0 件のコメント:
コメントを投稿