opencv例程之人脸检测
来源:互联网 发布:淘宝怎么用储蓄卡分期 编辑:程序博客网 时间:2024/05/20 17:42
人脸检测所用到的库函数如下
//从文件中打开对象
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);elsecvFlip(frame,image,0); //水平翻转Draw_Object(image);if(cvWaitKey(10)>0) break;}cvReleaseImage(&image);cvReleaseCapture(&capture);cvReleaseMemStorage(&storage);cvDestroyWindow(windowname);}return 0;}
- opencv例程之人脸检测
- opencv 人脸检测例程
- OpenCV人脸检测例程分析
- OpenCV人脸检测例程的简单应用
- 人脸笑容检测(opencv官方例程)
- openCV之人脸检测
- Android配置opencv开发环境并运行face-detection 人脸检测例程
- opencv例程之cvGoodFeaturesToTrack
- Opencv之人脸肤色检测总结
- opencv提高之人脸检测
- OpenCV2.4 例程五 (人脸检测)
- OPENCV例程2 :CANNY算子边缘检测
- 最简单的ADABOOST人脸检测例程。COPY运行,前提是你配置好OpenCV环境
- OPENCV之人眼检测
- opencv 检测人脸
- opencv检测人脸
- 人脸检测 opencv
- OpenCV人脸检测
- Creating SharePoint global calendar
- MySQL命令行导出数据库
- 《Java 编程思想》--第二章:一切都是对象
- 内存初始化函数memset()用法详解
- Linux动态连接原理 GOT PLT表详解
- opencv例程之人脸检测
- Java设计模式
- poj2385
- 《Java 编程思想》--第三章:操作符
- 虚函数的“陷阱”
- 关于为什么类的静态成员变量不能立即初始化 .
- Android优秀开源项目
- oracle wm_concat(column)函数的使用
- 《Java 编程思想》--第四章:控制执行流程,第五章:初始化与清理