摘 要:本论文以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作为图形界面开发,使用面向对象的思想来编写图像处理模块,并把该模块的各个功能进行独立出来,建立各个独立的类,从而减少了程序之间的耦合性,增加了代码的可重用性和可移植性,系统运行流畅,有广泛的使用前景.