求助:利用级联器进行人脸检测和人眼检测出现的问题

//时间:2015年6月28日
//功能:利用级联器进行人脸检测和人眼检测
//使用函数:CvSeq* cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade,
//                                     CvMemStorage* storage, double scale_factor=1.1,int min_neighbors=3,
//                                     int flags=0, CvSize(min_size=cvSize(0,0) ,CvSize max_size=cvSize(0,0));


#include <cv.h>
#include <highgui.h>


void detect_and_draw_object( IplImage *  , CvHaarClassifierCascade * , int  );   //函数的声明


int main()
{
const char * m_Str = "haarcascade_frontalface_alt.xml"; //级联器在   ......\OpenCV\sources\data\haarcascades
const char * m_Str1 = "E:\\Program Files\\OpenCV\sources\\data\\haarcascadeshaarcascade_eye_tree_eyeglasses.xml"; //正常使用需进行拷贝
IplImage * m_Pic = cvLoadImage( "人脸.jpg" , CV_LOAD_IMAGE_UNCHANGED );
if ( 0 == m_Pic )
{
return -1;
}
CvHaarClassifierCascade * m_Cascade = (CvHaarClassifierCascade *) cvLoad( m_Str1 );
detect_and_draw_object( m_Pic , m_Cascade , 1 );
cvNamedWindow( "目标检测" );
cvShowImage( "目标检测" , m_Pic );
cvWaitKey(0);
cvReleaseHaarClassifierCascade( &m_Cascade );
cvReleaseImage( &m_Pic );
cvDestroyWindow( "目标检测" );
return 0;
}




void detect_and_draw_object( IplImage * m_f_Pic , CvHaarClassifierCascade * m_f_Cascade , int m_f_pyramids  )
{
CvSeq * m_Face;
IplImage * m_image = m_f_Pic;
CvMemStorage* m_storage = cvCreateMemStorage( 0 );
int m_scale = 1;


if (m_f_pyramids)
{
m_image = cvCreateImage( cvSize( m_f_Pic->width/2 , m_f_Pic->height/2 ) , IPL_DEPTH_8U , 3);
cvPyrDown( m_f_Pic , m_image , CV_GAUSSIAN_5x5 ); //函数cvPyrDown使用Gaussian金字塔分解对输入图像向下采样。
m_scale = 2;
}
m_Face = cvHaarDetectObjects( m_image , m_f_Cascade , m_storage );


//在图上画线,标记检测到区域
for (int i=0; i<m_Face->total; i++)
{
CvRect m_face_rect = *(CvRect*)cvGetSeqElem( m_Face , i );
cvRectangle( m_f_Pic , cvPoint( m_face_rect.x , m_face_rect.y ) , cvPoint( (m_face_rect.x + m_face_rect.width) * m_scale , (m_face_rect.y + m_face_rect.height)*m_scale ) , CV_RGB(125,125,125) );
}
if( m_f_Pic != m_image )
cvReleaseImage( &m_image );
cvReleaseMemStorage( &m_storage );


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值