OpenCV摄像头人脸识别
2015-11-22 10:54
585 查看
注:
从外设摄像装置中获取图像帧,把每帧的图片与人脸特征进行匹配,用方框框住识别出来的人脸
需要用到的函数:
CvHaarClassifierCascade* cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size );
第一个参数:训练好的级联分类器的路径
第二个参数:级联分类器训练中采用的检测目标的尺寸
从外设摄像装置中获取图像帧,把每帧的图片与人脸特征进行匹配,用方框框住识别出来的人脸
需要用到的函数:
CvHaarClassifierCascade* cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size );
第一个参数:训练好的级联分类器的路径
第二个参数:级联分类器训练中采用的检测目标的尺寸
#include "stdafx.h" #include "iostream" using namespace std; #include "opencv2/opencv.hpp" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "Windows.h" void main() { IplImage *pFrame = NULL; IplImage *pGrayImg = NULL; //加载Haar特征检测分类器 const char *pCascadeFileName = "E:/C_VC_code/opencv/haarcascade_frontalface_alt2.xml"; //CvHaarClassifierCascade *pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pCascadeFileName); CvHaarClassifierCascade *pHaarCascade = cvLoadHaarClassifierCascade(pCascadeFileName,cvSize(200,200)); CvCapture *pCapture = cvCreateCameraCapture(0); //获取摄像头 cout<< "加载成功..." <<endl; int nFrmNum = 0; if(!pCapture) { cout<<"加载失败..."<<endl; return ; } //create window cvNamedWindow("Video",1); CvMemStorage *pcvMStorage; CvSeq *pCvSeq; while(pFrame = cvQueryFrame(pCapture)) //逐帧读取 { pGrayImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1); cvCvtColor(pFrame, pGrayImg, CV_BGR2GRAY); //---------------人脸识别------------------------- if (pHaarCascade != NULL) { pcvMStorage = cvCreateMemStorage(0); cvClearMemStorage(pcvMStorage); // 识别 pCvSeq = cvHaarDetectObjects(pGrayImg, pHaarCascade, pcvMStorage); // 标记 for(int i = 0; i <pCvSeq->total; i++) { CvRect* r = (CvRect*)cvGetSeqElem(pCvSeq, i); CvPoint pt[4]; pt[0] = cvPoint(r->x,r->y); pt[1] = cvPoint(r->x+r->width,r->y); pt[2] = cvPoint(r->x+r->width,r->y+r->height); pt[3] = cvPoint(r->x,r->y+r->height); CvPoint* ppt=pt; int count=4; cvPolyLine( pFrame, &ppt,&count,1,1,CV_RGB(10,240,33),2);//画矩形 } cvReleaseMemStorage(&pcvMStorage); } cvShowImage("Video",pFrame); //---------------人脸识别------------------------- char c = cvWaitKey(33); //按esc退出 if(c==27) { cvDestroyWindow("Video"); cvReleaseImage(&pFrame); cvReleaseImage(&pGrayImg); return; } } }
相关文章推荐
- opencv学习笔记(二十一)——阈值操作
- 如何得到linux的pagesize
- Linux常用环境安装步骤
- linux虚拟机网卡启动失败问题处理
- Linux Advance--可重入的getenv
- IRelationalOperator空间关系接口简介
- CentOS6.2使用yum安装LAMP及phpMyadmin
- linux常用命令
- 继续收集Docker书
- 练习--LINUX进程间通信之消息队列MSG
- 网站大并发处理
- Tomcat中JVM内存溢出及合理配置
- Linux下编译的第一个程序
- Linux--Advance getenv的非可重入版本
- 软件架构师?全栈工程师?CTO?不要升职!不要升职!不要升职!!
- 比较好的java学习网站
- Hadoop学习笔记
- shell配置--《shell脚本编程诀窍》
- opencv:轮廓属性
- Linux可重入函数