OpenCV学习:人脸识别 简单程序
来源:互联网 发布:网络教育和自考 编辑:程序博客网 时间:2024/06/05 16:31
//Haar特征检测,人脸识别算法,是用xml作为训练后的分类器做的#include<opencv2\opencv.hpp>#include<cstdio>#include<cstdlib>#include<Windows.h>using namespace std;int main(){//加载Haar特征检测分类器// haarcascade_frontalface_alt.xml系OpenCV自带的分类器////C++中用指针还是非常多的,//记住换行符用法,\后面不要有空格const char *pstrCascadeFileName = \"D:\\opencv2.4.9\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml";CvHaarClassifierCascade *pHaarCascade = NULL; //定义一个哈尔已有的训练过的结果//这里的cascade意思是一滴一滴下落---这是我的英语解词,可以忽略。pHaarCascade = (CvHaarClassifierCascade *)cvLoad(pstrCascadeFileName); //加载已有的xml文件//载入图像,这里又用到指针了const char *pstrImageName = "E:\\testpictures\\meizi.jpg"; IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED); //不加改变的加载原图。IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);//创建八位等大小一通道空图像cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);//复制图像//人脸识别与标记if (pHaarCascade != NULL) //如果有xml文件,则往下执行{//CvScalar:包含四个double成员,可以用来表示B,G,R,alpha----alpha是用来表示图像的透明度CvScalar FaceCircleColors[]= //这是一些列颜色,可以看作调色板{{ {0,0,255} }, { {0,128,255} },{ {0,255,255} },{ {0,255,0} },{ {255,128,0} },{ {255,255,0} },{ {255,0,0} },{ {255,0,255} }};//内存存储器是一个可用来存储诸如序列,轮廓,图形, 子划分等动态增长数据结构的底层结构。CvMemStorage *pcvMStorage = cvCreateMemStorage(0);cvClearMemStorage(pcvMStorage); //初始化内存//识别DWORD dwTimeBegin, dwTimeEnd; //DWORD 就是 Double Word, 每个word为2个字节的长度//在Release版本中,该函数从0开始计时,返回自设备启动后的毫秒数(不含系统暂停时间)。//在Debug版本中,设备启动后便从计时器中减去180秒。这样方便测试使用该函数的代码的正确溢出处理。dwTimeBegin = GetTickCount(); //稠密序列都派生自CvSeq,他们用来代表可扩展的一维数组 — 向量、栈、队列和双端队列。//稀疏序列派生自CvSet,CvSet也是基于CvSeq的,他们都是由节点所组成,每一个节点要么被占用,那么为空,由标志位flag决定。//函数 cvHaarDetectObjects 使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域,并且将这些区域作为一序列的矩形框返回。CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarCascade, pcvMStorage);//在这里获得一系列矩形框dwTimeEnd = GetTickCount();printf("人脸个数: %d 识别用时: %d ms \n", pcvSeqFaces->total, dwTimeEnd - dwTimeBegin);//计算出时间和包含人脸的矩形框的个数//标记for (int i = 0; i < pcvSeqFaces->total; i++){CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);//从矩形框稠密数列中抽取每一个矩形框CvPoint center;//定义一个中点int radius;//定义一个半径center.x = cvRound((r->x + r->width*0.5));//获取圆心的中心点x,y坐标center.y = cvRound((r->y + r->height*0.5));radius = cvRound((r->width + r->height)*0.25);//简化计算,本来应该是高的一半平方和宽的一半平方,求根号cvCircle(pSrcImage, center, radius, FaceCircleColors[i / 8], 2);//画在图片上画圆圈,涂上颜色,}cvReleaseMemStorage(&pcvMStorage);//释放内存} //新建窗口显示图像,和销毁窗口。const char *pstrWindowTitle = "人脸识别";cvNamedWindow(pstrWindowTitle, CV_WINDOW_AUTOSIZE);cvShowImage(pstrWindowTitle, pSrcImage);cvWaitKey(0);cvDestroyWindow(pstrWindowTitle);cvReleaseImage(&pSrcImage);cvReleaseImage(&pGrayImage);return 0;}
1 0
- OpenCV学习:人脸识别 简单程序
- opencv 学习之简单人脸识别学习
- OpenCV人脸识别程序
- Opencv之简单人脸识别
- 简单OPENCV人脸检测识别原理
- OpenCV + MFC 实现简单人脸识别
- android opencv 简单的人脸识别
- 图像识别 python+opencv的简单人脸识别
- 图像识别 python+opencv的简单人脸识别
- 图形识别-基于opencv+java简单程序
- Opencv学习(人脸识别)
- opencv学习-pca人脸识别
- 学习opencv——人脸识别
- Dlib+OpenCV深度学习人脸识别
- 基于PCA简单的人脸识别opencv实现-图像处理学习笔记
- 学习OpenCV——行人识别&人脸识别
- OpenCV人脸识别
- opencv人脸识别
- maven仓库上传jar包
- SpringMVC接受复杂json数据类型
- Centos上源码安装Hadoop2.7.2
- future给任务设置时限
- js调用php和php调用js的方法举例
- OpenCV学习:人脸识别 简单程序
- Compiler error: 写Swift报出 Obj-C 选择器不允许重载
- 一个关于android游戏下载静默安装功能的思路以及实现
- 欧拉环、欧拉路径的判定和求法
- md5加密
- redis 主备哨兵模式
- 指针变量
- Android开发,美到超乎你想象的android开源交互动画和视觉效果,外部库
- 面试中的赋值运算符函数