opencv人眼检测识别

#include "cv.h"
#include "highgui.h"
#include <assert.h>
#include<iostream>
using namespace std;
void detectEyes(IplImage *img)
{
 
   
      CvMemStorage* storage = 0;
      storage =cvCreateMemStorage(0) ;
     
      CvHaarClassifierCascade* cascade_f = 0;
      const char*cascade_name ="/home/dz/prog/OpenCV-2.4.2/data/haarcascades/haarcascade_frontalface_alt2.xml";
      cascade_f =(CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

     
      CvSeq *faces= cvHaarDetectObjects(
              img,                     
              cascade_f,         
              storage,             
              1.1, 3,0,         
              cvSize(40, 40) 
      );

     
      if(faces->total == 0) return;
cout<<faces->total<<endl;
     
      for(intii=0;ii<faces->total;ii++)
      {
              cout<<ii<<endl;
                  CvRect *face = (CvRect*)cvGetSeqElem(faces, ii);

     
      cvRectangle(
              img,
              cvPoint(face->x, face->y),
              cvPoint(
                      face->x + face->width,
                      face->y + face->height
              ),
              CV_RGB(255, 0, 0),
              1, 8, 0
      );

           
//      cvClearMemStorage(storage);
      //cvRelease((void**)cascade_f);
CvMemStorage* storage1 = 0;
storage1 = cvCreateMemStorage(0) ;

     
      cvSetImageROI(
              img,                                     
              cvRect(
                      face->x,                     
                      face->y + (face->height/5.5),
                      face->width,             
                      face->height/3.0     
              )
      );

     
      CvHaarClassifierCascade* cascade_e = 0;

      const char*cascade_name2 ="/home/dz/prog/OpenCV-2.4.2/data/haarcascades/haarcascade_eye.xml";
      cascade_e =(CvHaarClassifierCascade*)cvLoad( cascade_name2, 0, 0, 0 );
      assert(cascade_e != NULL);
      //storage =cvCreateMemStorage(0) ;
     
      CvSeq *eyes= cvHaarDetectObjects(
              img,                     
              cascade_e,         
              storage1,             
              1.1, 3,0,       
              cvSize(4, 5) 

      );
      int i;
     
      for( i = 0;i < (eyes ? eyes->total : 0); i++ ){
             
              CvRect *eye = (CvRect*)cvGetSeqElem(eyes, i);

             
              cvRectangle(
                      img,
                      cvPoint(eye->x, eye->y),
                      cvPoint(eye->x + eye->width,eye->y + eye->height),
                      CV_RGB(255, 0, 0),
                      1, 8, 0
              );
      }
     
              cvResetImageROI(img);

      }

}


void detect_eye_and_display_pic(char *argv)
{
      IplImage*img = cvLoadImage( argv );
      //opens awindow on the screen that can
      //containand display an image
      cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
      //detecteyes in the image
      detectEyes(img);

      //Wheneverwe have an image in the form of an IplImage* pointer, we candisplay it in an
      //existingwindow with cvShowImage().
      //ThecvShowImage() function requires that a named
      //windowalready exist (created by cvNamedWindow()).
      cvShowImage("Example1", img );
      //ThecvWaitKey() function asks the program to stop and wait for akeystroke
      cvWaitKey(0);
      //free theallocated memory
      cvReleaseImage( &img );
      cvDestroyWindow( "Example1" );
}
int main()
{
      detect_eye_and_display_pic("bb.jpg");

      return 0;
}
一下整理了简单的:
#include "cv.h"
#include "highgui.h"
#include <assert.h>
#include<iostream>
using namespace std;

int main()
{
      IplImage*img = cvLoadImage( "cc.jpg" );
      cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
      CvMemStorage* storage1=0;
      storage1=cvCreateMemStorage(0);
      CvHaarClassifierCascade *cascade_f=0;
      const char*cascade_name1="/home/dz/prog/OpenCV-2.4.2/data/haarcascades/haarcascade_frontalface_alt2.xml";
      cascade_f=(CvHaarClassifierCascade*)cvLoad(cascade_name1,0,0,0);
      assert(cascade_f!=NULL);
      CvSeq*faces=cvHaarDetectObjects(img,cascade_f,storage1,1.1,3,11,cvSize(30,30));
          for(intii=0;ii<(faces?faces->total:0);ii++)
      {
                  CvRect *face = (CvRect*)cvGetSeqElem(faces, ii);
                  cvRectangle(img,cvPoint(face->x,face->y),cvPoint(face->x +face->width,face->y +face->height)
                              ,CV_RGB(255, 0, 0),1, 8, 0);
              cvSetImageROI(img,cvRect(face->x,face->y+ (face->height/5.5),face->width,face->height/3.0));

      CvMemStorage* storage = 0;
      storage =cvCreateMemStorage(0) ;
      CvHaarClassifierCascade* cascade_e = 0;
      const char*cascade_name2 ="/home/dz/prog/OpenCV-2.4.2/data/haarcascades/haarcascade_eye.xml";
      cascade_e =(CvHaarClassifierCascade*)cvLoad( cascade_name2, 0, 0, 0 );
      assert(cascade_e != NULL);
      //storage =cvCreateMemStorage(0) ;
     
      CvSeq *eyes= cvHaarDetectObjects(img,cascade_e,storage,1.01, 3,3,cvSize(20,20));
      int i;
      cout<<eyes->total<<endl;
     
      for( i = 0;i < (eyes ? eyes->total : 0); i++ ){

      CvRect *eye= (CvRect*)cvGetSeqElem(eyes, i);
cvRectangle(img, cvPoint(eye->x,eye->y),cvPoint(eye->x +eye->width, eye->y +eye->height),CV_RGB(255, 0, 0),1, 8, 0);
      }
      cvResetImageROI(img);
      }


      cvShowImage("Example1", img );
      cvWaitKey(0);
      cvReleaseImage( &img );
      cvDestroyWindow( "Example1" );
      return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值