人脸识别最终版

本文深入探讨了人脸识别技术的原理、应用和最新进展,包括特征提取、比对算法以及在安全、监控和身份验证领域的广泛应用。同时,也讨论了人脸识别的挑战,如光照变化、面部遮挡和表情影响,并介绍了当前解决这些问题的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本程序首先利用从摄像头检测到的人脸图片,先进行直方图均衡化
并缩放到92*112的图片大小,然后根据train.txt的采集到的人脸模版
进行匹配识别(最好是在统一光照下,采集不同角度的人脸图片各一张)
注意:影响的极大因素在于光照,模版若与采集的图像光照不一样,识别率很低。
经测试,模板若与检测的图像在同一光照下的话,侧脸,仰脸,正脸均可识别,且识别率较高
//
#include <stdio.h>
#include <string.h>
#include "cv.h"
#include "cvaux.h"
#include "highgui.h"
#include <stdlib.h>
#include <assert.h>  
#include <math.h>  
#include <float.h>  
#include <limits.h>  
#include <time.h>  
#include <ctype.h>  

////定义几个重要的全局变量
IplImage ** faceImgArr        = 0; // 指向训练人脸和测试人脸的指针(在学习和识别阶段指向不同)
CvMat    *  personNumTruthMat = 0; // 人脸图像的ID号
int nTrainFaces               = 0; // 训练图像的数目
int nEigens                   = 0; // 自己取的主要特征值数目
IplImage * pAvgTrainImg       = 0; // 训练人脸数据的平均值
IplImage ** eigenVectArr      = 0; // 投影矩阵,也即主特征向量
CvMat * eigenValMat           = 0; // 特征值
CvMat * projectedTrainFaceMat = 0; // 训练图像的投影
char *filename[5]={"face1.jpg","face2.jpg","face3.jpg","face4.jpg","face5.jpg"};

static CvMemStorage* storage = 0;  
static CvHaarClassifierCascade* cascade = 0;  
int j=0;//统计记录的人脸数
char a[512]={0};
int a1,a2,a3,a4;
time_t timeBegin, timeEnd;    
  int timeuse;  
//// 函数原型
void learn();
void doPCA();
void storeTrainingData();
int  loadTrainingData(CvMat ** pTrainPersonNumMat);
int  findNearestNeighbor(float * projectedTestFace);
int  loadFaceImgArray(char * filename);
void printUsage();
int detect_and_draw( IplImage* image );  
int recognize(IplImage *faceimg);

//主函数,主要包括学习和识别两个阶段,需要运行两次,通过命令行传入的参数区分
int main( int argc, char** argv )
{
    CvCapture* capture = 0;  
    IplImage *frame, *frame_copy = 0;  
    int optlen = strlen("--cascade=");  
    char *cascade_name = "H://opencv-2.4.3//opencv//data//haarcascades//haarcascade_frontalface_alt2.xml";  
        //opencv装好后haarcascade_frontalface_alt2.xml的路径,  
       //也可以把这个文件拷到你的工程文件夹下然后不用写路径名cascade_name= "haarcascade_frontalface_alt2.xml";    
       //或者cascade_name ="C:\\Program Files\\OpenCV\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"  
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );  
   
    if( !cascade )  
    {  
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );  
        fprintf( stderr,  
        "Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n" );  
        return -1;  
    }  
    storage = cvCreateMemStorage(0);  
     capture = cvCreateCameraCapture(-1);  
    cvNamedWindow( "result", 1 );  
   
    if( capture )  
    {     timeBegin = time(NULL);    
          learn();
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值