徐くんプロジェクト
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; }
パラメターを変えないと、うまくは検出されないこともある。口と鼻の検出の精度は低いみたい。