opencv例程之人脸检测
2013-04-25 17:12
387 查看
人脸检测所用到的库函数如下
//从文件中打开对象
//人脸检测用于打开训练数据,用法如:cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
//从联级分类器中查找目标
//直方图归一化
下面是精简了的人脸检测代码
//从文件中打开对象
void* cvLoad( const char* filename, CvMemStorage* memstorage=NULL, const char* name=NULL, const char** real_name=NULL );
//人脸检测用于打开训练数据,用法如:cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
//从联级分类器中查找目标
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) );
//直方图归一化
void cvEqualizeHist( const CvArr* src, CvArr* dst );//该方法能归一化图像亮度和增强对比度
下面是精简了的人脸检测代码
/* *该代码为Opencv代码,来自博客http://blog.csdn.net/xlh145/ * */ #include<iostream> #include<cv.h> #include<highgui.h> using namespace std; CvHaarClassifierCascade*cascade;//训练器标识 CvMemStorage* storage; CvCapture * capture;//相机标识 IplImage * frame = 0; //标识摄像头中一帧的数据 IplImage *image = 0; //待检测的图像 char *windowname = "结果"; void Draw_Object(IplImage* search) { double scale = 1.3;//缩放图像的尺寸 IplImage * gray = cvCreateImage(cvGetSize(search),search->depth,1); IplImage * small_gray = cvCreateImage(cvSize(cvRound(search->width/scale),cvRound(search->height/scale)),search->depth,1); //创建小的图片 cvCvtColor(search,gray,CV_BGR2GRAY); //转换为灰度图 cvResize(gray,small_gray); //缩放尺寸 cvEqualizeHist(small_gray,small_gray);//直方图归一化 cvClearMemStorage(storage);//清空储存器数据 CvSeq* faces = cvHaarDetectObjects( small_gray, cascade, storage, 1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/, cvSize(30, 30) ); //检测人脸 //下面是显示所有检测的人脸的数据 for(int i=0;i<faces->total;i++) { CvRect* rect = (CvRect*)cvGetSeqElem(faces,i); //获得指定索引的矩形框 CvPoint center; //中心坐标 int radius;//半径 center.x = cvRound((rect->x + rect->width*0.5)*scale); center.y = cvRound((rect->y + rect->height*0.5)*scale); radius = cvRound((rect->width + rect->height)*0.25*scale); cvCircle( image, center, radius, CV_RGB(255,0,0), 3, 8, 0 ); //绘制检测到的位置 } cvShowImage(windowname,image); cvReleaseImage(&gray); cvReleaseImage(&small_gray); } int main() { cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml", 0, 0, 0 ); //加载训练器样本 if( !cascade ) { fprintf( stderr, "ERROR: 没有找到训练样本数据\n" ); return -1; } capture = cvCaptureFromCAM(0); //打开相机 if(capture) //打开相机成功 { cvNamedWindow(windowname,1); //创建窗口 storage = cvCreateMemStorage(0); //创建存储空间 //循环获取图像 while(true) { if(!cvGrabFrame(capture)) { break; } frame = cvRetrieveFrame( capture ); if(!frame) { break; } if(!image) //第一次需要创建 image = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels); if(frame->origin==IPL_ORIGIN_TL) cvCopy(frame,image); else cvFlip(frame,image,0); //水平翻转 Draw_Object(image); if(cvWaitKey(10)>0) break; } cvReleaseImage(&image); cvReleaseCapture(&capture); cvReleaseMemStorage(&storage); cvDestroyWindow(windowname); } return 0; }
相关文章推荐
- OpenCV人脸检测例程的简单应用
- OpenCV2.4 例程五 (人脸检测)
- 人脸笑容检测(opencv官方例程)
- OpenCV例程实现人脸检测
- Android配置opencv开发环境并运行face-detection 人脸检测例程
- opencv 人脸检测例程
- OpenCV人脸检测例程分析
- OpenCV小例程——人脸检测
- 【OpenCV】检测人脸、眼睛、鼻子、耳朵、嘴
- Opencv人脸检测Mode的训练
- OpenCV中文网站例程——Canny边缘检测
- OpenCV实现人脸检测并覆盖面具
- OpenCV 人脸检测自学(3)
- win10的visual studio 2015 安装opencv3.1,并且编写demo人脸检测
- OpenCV实践之路——人脸检测(C++/Python)
- Python-OpenCV人脸检测(代码)
- OpenCV人脸跟踪canny边缘检测
- JAVA应用JNI调用OpenCV实现人脸检测(1)
- openCV|Haar人脸检测与提取
- OPENCV人脸检测实现