OpenCv人脸检测

//#include<opencv2/opencv.hpp>
#include<opencv\cv.h>
#include<opencv\cxcore.h>
#include<opencv\highgui.h>

using namespace cv;


/*
void main()
{
	char *pFileName;
	pFileName="../LENA.png";
	IplImage *img=cvLoadImage(pFileName);   //载入图像
	cvNamedWindow("Image",1);               //创建窗口 
	cvShowImage("Image",img);              //显示图像
	cvWaitKey();                          //按键等待
	cvDestroyWindow("Image");             //销毁窗口
	cvReleaseImage(&img);                 //释放图像
}

*/
/*
int main() 
{ 
   Mat
 img = imread("../LENA.png"); 
  
   if (img.empty()) 
   { 
       fprintf(stderr,"Error:load image failed."); 
       return -1; 
   } 
   namedWindow("image",CV_WINDOW_AUTOSIZE);  
   imshow("image",img);  
   waitKey(); 
  
   return 0; 
} 
*/


static CvHaarClassifierCascade* cascade = 0;
static CvMemStorage* storage = 0;

void detect_and_draw( IplImage* image );
const char* cascade_name ="haarcascade_frontalface_alt.xml";                //人脸检测要用到的分类器

int main()
{
     cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );   //加载人脸检测所用的分类器
     if( !cascade )
     {
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
        return -1;
     }
     storage = cvCreateMemStorage(0);                                       //动态存储结构,用来存储人脸在图像中的位置
     cvNamedWindow( "result", 1 );
     const char* filename = "lena.jpg";                                     //待检测图像
     IplImage* image = cvLoadImage( filename, 1 );                          //加载图像
     detect_and_draw( image );                                              //对加载的图像进行检测
     cvWaitKey(0);
     cvReleaseImage( &image );
     cvDestroyWindow("result");
     return 0;
}

void detect_and_draw( IplImage* img )
{
    static CvScalar colors[] = 
    {
        {{0,0,255}},
        {{0,128,255}},
        {{0,255,255}},
        {{0,255,0}},
        {{255,128,0}},
        {{255,255,0}},
        {{255,0,0}},
        {{255,0,255}}
    };
 
    double scale = 1.3;
    IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
    IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
                         cvRound (img->height/scale)), 8, 1 );
 
    cvCvtColor( img, gray, CV_BGR2GRAY );
    cvResize( gray, small_img, CV_INTER_LINEAR );
    cvEqualizeHist( small_img, small_img );
    cvClearMemStorage( storage );
 
    if( cascade )
    {
        /*函数cvHaarDetectObjects检测图像中的目标,由OpenCV提供。*/
        CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0 ,
                                            cvSize(30, 30) );
        for( int i = 0; i < (faces ? faces->total : 0); i++ )
        {
            CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
            CvPoint center;
            int radius;
            center.x = cvRound((r->x + r->width*0.5)*scale);
            center.y = cvRound((r->y + r->height*0.5)*scale);
            radius = cvRound((r->width + r->height)*0.25*scale);
            cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
        }
    }
 
    cvShowImage( "result", img );
    cvReleaseImage( &gray );
    cvReleaseImage( &small_img );
}

const char* cascade_name ="haarcascade_frontalface_alt.xml";                //人脸检测要用到的分类器
分类器的添加:


添加到工程目录文件中


结果:



问题一:

如何隐藏Win32 console application 的Console窗口

步骤:项目->本项目属性->链接->控制台控制台 (/SUBSYSTEM:CONSOLE)将其改为:控制台 (/SUBSYSTEM:WINDOWS)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值