#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;
}
#include "highgui.h"
#include <assert.h>
#include<iostream>
using namespace std;
void detectEyes(IplImage *img)
{
cout<<faces->total<<endl;
//
CvMemStorage* storage1 = 0;
storage1 = cvCreateMemStorage(0) ;
}
void detect_eye_and_display_pic(char *argv)
{
}
int main()
{
}
一下整理了简单的:
#include "cv.h"
#include "highgui.h"
#include <assert.h>
#include<iostream>
using namespace std;
int main()
{
cvRectangle(img, cvPoint(eye->x,eye->y),cvPoint(eye->x +eye->width, eye->y +eye->height),CV_RGB(255, 0, 0),1, 8, 0);
}