基于OpenCV的人脸检测与识别系统

更新时间:2024-02-22 作者:用户投稿原创标记本站原创 点赞:3569 浏览:9049

摘 要:本论文以OpenCV图像处理库为基础,采用QT作为图形界面开发,具有人脸采集,图片训练,数据库管理及人脸识别等功能,并且使用光线补偿等方式提高识别率.

关 键 词:OpenCVQT人脸检测人脸识别

中图分类号:TP31文献标识码:A文章编号:1672-3791(2013)07(b)-0004-02

近年来计算机视觉技术在视觉领域中取得了飞速的发展,并在其他领域中得到了广泛的应用,人脸识别在图像处理与视频检索、视频监控、视频显示等方面占据着重要的位置.本文提出了基于OpenCV图像处理库的人脸检测与识别系统,通过分析人脸检测与识别的原理及方法设计了人脸检测与识别系统,该系统具有人脸采集,图片训练,数据库管理及人脸识别等功能,并且使用了光线补偿等方式更好的进行图像的处理和后期的识别.

1系统的运行流程图

该人脸检测与识别系统的处理流程如图1.

2系统详细设计及实现

2.1人脸定位模块

基于OpenCV的人脸检测中,先进行图像的采集,然后建立自适应模型并将该模型进行训练,使用XML文件保存该训练模型数据,有了这个模型后我们就可以从新使用新的模型来进行图片的对比,把当前的图片与该模型进行匹配得出的结果使用矩形进行标记,并在QT界面上画出该目标区域.

2.2人脸识别模块

人脸识别的流程为,从摄像头采集图片后对图片进行灰度化处理,分配PCA存储空间,再使用级联分类检测器对图片进行特征提取训练.提取出采集的人脸图片的特征,保存数据到facedata.xml文件.人脸识别的具体实现步骤和函数如下.

(1)得到一个32位的浮动图像.

IplImage*convertFloatImageToUcharImage(constIplImage*srcImg)

(2)保存源图片的所有特征向量.

voidFaceRec::storeEigenfaceImages()

(3)下载需要训练的数据,并将训练好的数据保存到xml文件中.

voidFaceRec::learn()

{szFileTrain等于"40.txt";//训练数据的路径

doPCA();//为人脸训练分配PCA空间

storeTrainingData();//将训练好的数据保存到xml文件中

if(SE_EIGENFACE_IMAGES)

{storeEigenfaceImages();//保存这些训练图片为一张位图}

(4)从摄像头中获取一帧图片.

intFaceRec::recFromFrame(IplImage*faceImage)


(5)从facedata.xml下载训练好的数据.

intFaceRec::loadTrainingData(CvMat**pTrainPersonNumMat)

(6)为图片分配PCA空间.

voidFaceRec::doPCA()

2.3光线补偿的模块

从摄像头对图像进行采集会受到设备的干扰及环境因素的影响,从而会使图像的色彩向某个固定的方向移动,例如色彩偏黄、变蓝、变黑等.系统为了消除图像的色彩偏差,需要对图像的RGB三个分量值进行线性调整.使用检测图像中亮度在前10%的像素(参考白),按公式计算出调整值.整幅图像的其他像素点的色彩值也都按这一调整尺度进行交换,通过这种技术可以更好的进行图像的处理和后期的识别.

在QT下通过增加菜单栏,在其顶部添加一子目录,将命名为“预处理”,并在其下方的属性栏中命名为“弹出”菜单,右击预处理则该选项会自动生成一个子菜单项,属性名为“光线补偿”,并在右下面的属性中把ID号设置为ID_READY_LIGHTERGTHNSATE,对应文件FaceDetect.Cpp中的函数recognize()实现,并在recFromFrame(IplImage*faceImage)中添加如下代码:

hDIBTempp等于gDib.CopyHandle(hDIB);

gDib.LightingComper(hDIB);

GlobalUnlock(hDIB);

Invalidate();

光线补偿通过对图像的RGB进行转换而使图片的光线变亮或变暗,函数LightingComper()是类facerecognize的一个目标函数.

2.4测试

3结语

基于OpenCV图像处理库的人脸检测与识别具有人脸采集,图片训练,数据库管理及人脸识别等功能,系统采用Linux作为开发工具,利用QT作为图形界面开发,使用面向对象的思想来编写图像处理模块,并把该模块的各个功能进行独立出来,建立各个独立的类,从而减少了程序之间的耦合性,增加了代码的可重用性和可移植性,系统运行流畅,有广泛的使用前景.

相关论文范文