用visual studio 2012和opencv248实现人脸检测

visual studio 2012、opencv248实现人脸检测

一、保证你的visual studio 2012 和 opencv248配置成功,且可以显示图像。
若不能,可以参考这个网站

二、新建一个项目,步骤如下:

1.文件>新建>项目:

用visual studio 2012和opencv248实现人脸检测_第1张图片

用visual studio 2012和opencv248实现人脸检测_第2张图片

2.把里面的代码删掉。

三、把如下代码粘贴进去。

// facedetectionMine.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include 
#include "cv.h" 
#include "highgui.h" 

using namespace std;
using namespace cv;

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

void detect_and_draw( IplImage* image ); //函数声明

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

int _tmain(int argc, _TCHAR* argv[]) 
{     
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );   
//加载人脸检测所用的分类器      
   if( !cascade )  
{       
    fprintf( stderr, "ERROR: Could not load classifier cascade\n" );  
    getchar();
    return -1;   
} 

storage = cvCreateMemStorage(0);                                         
cvNamedWindow( "result", 1 );   
//待检测图像(包含绝对路径) 
IplImage* image = cvLoadImage( "1.jpg", -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 );
} 

四、找张有一个正面人脸的照片,命名为:1.jpg,放在之前可以显示照片的地方。
opencv找到名为 haarcascade_frontalface_alt.xml 的文件,把它放在与照片同一个目录下。

五、运行。

六、若出现:error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
方法:

用visual studio 2012和opencv248实现人脸检测_第3张图片

用visual studio 2012和opencv248实现人脸检测_第4张图片

在红色方框里加入:
/D “_CRT_SECURE_NO_DEPRECATE”
必须完整。

七、若出现:ConsoleApplication3.obj : error LNK2019: 无法解析的外部符号 _cvHaarDetectObjects,该符号在函数 “void __cdecl detect_and_draw(struct _IplImage *)” (?detect_and_draw@@YAXPAU_IplImage@@@Z) 中被引用
那是你的附加依赖项没把要用的 .lib 文件包含好。
可以尝试都包含,可以在“opencv路径\build\x86\vc11\lib”找到所有的.lib 文件的名字。 下面仅供参考:

opencv_calib3d248d.lib
opencv_contrib248d.lib
opencv_core248d.lib
opencv_features2d248d.lib
opencv_flann248d.lib
opencv_gpu248d.lib
opencv_highgui248d.lib
opencv_imgproc248d.lib
opencv_legacy248d.lib
opencv_ml248d.lib
opencv_objdetect248d.lib
opencv_ts248d.lib
opencv_video248d.lib

八、效果如下:

用visual studio 2012和opencv248实现人脸检测_第5张图片

九、若还是不怎么懂的,可以 参考一下这个网站

你可能感兴趣的:(基础训练,opencv,人脸检测,vs2012)