opencv人眼检测识别

来源:互联网 发布:成人用品淘宝店要求 编辑:程序博客网 时间:2024/05/11 16:53
#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;
}
原创粉丝点击