徐くんプロジェクト
OpenCVを使った顔と目の検出。
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv/highgui.h"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
int main(int argc, char** argv){
IplImage* img=cvLoadImage(argv[1]);
CvMemStorage* FaceStorage = cvCreateMemStorage(0);
CvMemStorage* EyeStorage = cvCreateMemStorage(0);
CvHaarClassifierCascade* FaceCascade = (CvHaarClassifierCascade*)
cvLoad("/opt/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml");
CvHaarClassifierCascade* EyeCascade =(CvHaarClassifierCascade*)
cvLoad("/opt/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml");
double scale = 1.2;
// Detect Faces
cvClearMemStorage(FaceStorage);
CvSeq* FaceObjects = cvHaarDetectObjects(img,FaceCascade,FaceStorage,scale,1.1,0,cvSize(1,1));
CvRect* rF;
// Loop through objects and draw boxes
for (int i=0;i<(FaceObjects ? FaceObjects->total:0);i++ ){
rF = ( CvRect* )cvGetSeqElem(FaceObjects,i);
cvRectangle(img,cvPoint(rF->x,rF->y),cvPoint(rF->x+rF->width,rF->y+rF->height ),
CV_RGB(255,0,0),3,4,0);
}
// Detect Eyes
cvClearMemStorage(EyeStorage);
CvSeq* EyeObjects = cvHaarDetectObjects(img,EyeCascade,EyeStorage,scale,1.1,0,cvSize(1,1));
CvRect* rE;
// Loop through objects and draw boxes
for (int i=0;i<(EyeObjects ? EyeObjects->total:0);i++){
rE = ( CvRect* )cvGetSeqElem(EyeObjects,i);
cvRectangle(img,cvPoint(rE->x,rE->y),cvPoint(rE->x+rE->width,rE->y+rE->height ),
CV_RGB(0,0,255),3,4,0);
}
// Displaying image
cvNamedWindow("Face&Eye Detection");
cvShowImage("Face&Eye Detection",img);
cvWaitKey();
cvReleaseImage(&img);
return 0;
}
パラメターを変えないと、うまくは検出されないこともある。口と鼻の検出の精度は低いみたい。

