認知情報解析B face detection

徐くんプロジェクト
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;
}

opencvFD01input.jpg opencvFD01output.jpg

パラメターを変えないと、うまくは検出されないこともある。口と鼻の検出の精度は低いみたい。

Leave a Reply