2024年3月30日发(作者:)

word格式-可编辑-感谢下载支持

#include "cv.h"

#include "highgui.h"

#include

#ifdef _EiC

#define WIN32

#endif

static CvMemStorage* storage = 0;

static CvHaarClassifierCascade* cascade = 0;

void detect_and_draw( IplImage* image );

const char* cascade_name =

"haarcascade_frontalface_";//人脸检测分类器

int main( int argc, char** argv )

{

CvCapture* capture = 0;

IplImage *frame, *frame_copy = 0;

int optlen = strlen("--cascade=");

const char* input_name;

if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )

{

cascade_name = argv[1] + optlen;

input_name = argc > 2 ? argv[2] : 0;

}

else

{

cascade_name = "E:毕业设计智能机器人动态人脸识别系统陈建州程序 .xml";//分类器路径

input_name = argc > 1 ? argv[1] : 0;

}

cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

if( !cascade )//如果没有找到分类器,输出以下

{

fprintf( stderr, "ERROR: Could not load classifier cascaden" );

fprintf( stderr,

"Usage: facedetect --cascade="" [filename|camera_index]n" );

return -1;

}

storage = cvCreateMemStorage(0);

capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );//读取摄像头

word格式-可编辑-感谢下载支持

if(!capture)//如果没有摄像头读取视频文件

capture = cvCaptureFromAVI("检测.avi");

cvNamedWindow( "result", 1);//创建窗口

if( capture )

{

for(;;)

{

if( !cvGrabFrame( capture ))//从摄像头中抓取帧

break;

frame = cvRetrieveFrame( capture );//读取上边抓取的帧

if( !frame )

break;

if( !frame_copy )

frame_copy = cvCreateImage( cvSize(frame->width,frame->height),

IPL_DEPTH_8U, frame->nChannels );

if( frame->origin == IPL_ORIGIN_TL )

cvCopy( frame, frame_copy, 0 );

else

cvFlip( frame, frame_copy, 0 );

detect_and_draw( frame_copy );

if( cvWaitKey( 10 ) >= 0 )

break;

}

cvReleaseImage( &frame_copy );

cvReleaseCapture( &capture );

}

else//没检测到视频文件或者摄像头

{

const char* filename = (char*)"检测.jpg";//读图片

IplImage* image = cvLoadImage( filename, 1 );

if( image )

{

detect_and_draw( image );

cvWaitKey(0);

cvReleaseImage( &image );

}

else

{

FILE* f = fopen( filename, "rt" );