OpenCV实现人脸识别简单程序

本文实例为大家分享了OpenCV实现人脸识别程序的具体代码,供大家参考,具体内容如下

//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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • opencv 做人脸识别 opencv 人脸匹配分析

    机器学习 机器学习的目的是把数据转换成信息. 机器学习通过从数据里提取规则或模式来把数据转成信息. 人脸识别 人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸. 每个节点的正确识别率很高,但正确拒绝率很低. 任一节点判断没有人脸特征则结束运算,宣布不是人脸. 全部节点通过,则宣布是人脸. 工业上,常用人脸识别技术来识别物体. 对图片进行识别 复制代码 代码如下: #include "opencv2/core/core.hpp" #include "opencv2/obj

  • 基于OpenCV的PHP图像人脸识别技术

    openCV是一个开源的用C/C++开发的计算机图形图像库,非常强大,研究资料很齐全.本文重点是介绍如何使用php来调用其中的局部的功能.人脸侦查技术只是openCV一个应用分支. 1.安装 从源代码编译成一个动态的so文件. 1.1.安装 OpenCV (OpenCV 1.0.0) 下载地址:http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948 #tar xvzf OpenCV-1.0.0.ta

  • 详解如何用OpenCV + Python 实现人脸识别

    下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文. 必备知识 Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等. opencv api 要想使用opencv,就必须先知道其能干什么,怎么做.于是API的重要性便体现出来了.就本例而言,使用到的函数

  • OpenCV实现人脸识别

    主要有以下步骤: 1.人脸检测 2.人脸预处理 3.从收集的人脸训练机器学习算法 4.人脸识别 5.收尾工作 人脸检测算法: 基于Haar的脸部检测器的基本思想是,对于面部正面大部分区域而言,会有眼睛所在区域应该比前额和脸颊更暗,嘴巴应该比脸颊更暗等情形.它通常执行大约20个这样的比较来决定所检测的对象是否为人脸,实际上经常会做上千次. 基于LBP的人脸检测器基本思想与基于Haar的人脸检测器类似,但它比较的是像素亮度直方图,例如,边缘.角落和平坦区域的直方图. 这两种人脸检测器可通过训练大的图

  • opencv实现简单人脸识别

    对于opencv 它提供了许多已经练习好的模型可供使用,我们需要通过他们来进行人脸识别 参考了网上许多资料 假设你已经配好了开发环境 ,在我之前的博客中由开发环境的配置. 项目代码结构: dataSet : 存储训练用的图片,他由data_gen生成,当然也可以修改代码由其他方式生成 haarcascade_frontalface_alt.xml  . haarcascade_frontalface_default.xml: 用于人脸检测的haar分类器,网上普遍说第一个效果更好,第二个运行速度

  • OPENCV+JAVA实现人脸识别

    本文实例为大家分享了JAVA实现人脸识别的具体代码,供大家参考,具体内容如下 官方下载 安装文件 ,以win7为例,下载opencv-2.4.13.3-vc14.exe 安装后,在build目录下 D:\opencv\build\java,获取opencv-2413.jar,copy至项目目录 同时需要dll文件 与 各 识别xml文件,进行不同特征的识别(人脸,侧脸,眼睛等) dll目录:D:\opencv\build\java\x64\opencv_java2413.dll xml目录:D:

  • Kears+Opencv实现简单人脸识别

    写在前面:这篇文章也是借鉴了一些前辈的代码和思路写的,代码有些也是复用了别人的. 先说下思路: 1.首先利用Opencv检测出人脸的区域 2.在成功的检测出人脸区域后,将识别出的人脸区域截取成图片,储存起来,用作后续的训练数据. 3.在获取到了足够多的数据后,搭建CNN网络进行训练. 5.训练完成后,将模型存储起来. 6.在利用Opencv实时读取视频流,将检测出人脸的区域变成图片放入模型中进行预测. 以上就是这个项目的一个基本的思路了. 1.利用Opencv检测人脸的代码如下,这个代码在Ope

  • Opencv LBPH人脸识别算法详解

    简要:  LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像:再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照.缩放.旋转和平移的影响. #include<opencv2\open

  • OpenCV + MFC实现简单人脸识别

    用VS2010 + OpenCV 2.4.9 实现简单人脸识别 首先放效果图(为了防止辣眼睛,后期处理了下): 首先声明,我是在参考其他文章的基础上实现的. 切入正题: 1 设置控件 首先新建一个基于Dialog的MFC程序的工程,工程名为FaceDetect : 然后在IDD_FACEDETECT_DIALOG对话框中添加一个Picture 控件,ID命名为:IDC_PICTURE:添加一个Button控件,Caption命名为 "检测",ID命名为IDC_START,将原来自动生成

  • python+opencv实现的简单人脸识别代码示例

    # 源码如下: #!/usr/bin/env python #coding=utf-8 import os from PIL import Image, ImageDraw import cv def detect_object(image): '''检测图片,获取人脸在图片中的坐标''' grayscale = cv.CreateImage((image.width, image.height), 8, 1) cv.CvtColor(image, grayscale, cv.CV_BGR2GR

随机推荐