没有合适的资源?快使用搜索试试~ 我知道了~
首页Opencv EigenFace人脸识别算法详解
资源详情
资源评论
资源推荐

Opencv EigenFace人脸识别算法详解人脸识别算法详解
主要为大家详细介绍了Opencv EigenFace人脸识别算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们
可以参考一下
简要:简要:
EigenFace是基于PCA降维的人脸识别算法,PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。 它是将图
像每一个像素当作一维特征,然后用SVM或其它机器学习算法进行训练。但这样维数太多,根本无法计算。我这里用的是
ORL人脸数据库,英国剑桥实验室拍摄的,有40位志愿者的人脸,在不同表情不同光照下每位志愿者拍摄10张,共有400张图
片,大小为112*92,所以如果把每个像素当做特征拿来训练的话,一张人脸就有10304维特征,这么高维的数据根本无法处
理。所以需要先对数据进行降维,去掉一些冗余的特征。
第一步:第一步:将ORL人脸图片的地址统一放在一个文件里,等会通过对该文件操作,将图片全部加载进来。
//ofstream一般对文件进行读写操作,ifstream一般对文件进行读操作
ofstream file;
file.open("path.txt");//新建并打开文件
char str[50] = {};
for (int i = 1; i <= 40; i++) {
for (int j = 1; j <= 10; j++) {
sprintf_s(str, "orl_faces/s%d/%d.pgm;%d", i, j, i);//将数字转换成字符
file << str << endl;//写入
}
}
得到路劲文件如下图所示:
第二步:第二步:读入模型需要输入的数据,即用来训练的图像vector<Mat>images和标签vector<int>labels
string filename = string("path.txt");
ifstream file(filename);
if (!file) {
printf("could not load file");
}
vector<Mat>images;
vector<int>labels;
char separator = ';';
string line,path, classlabel;
while (getline(file,line)) {
stringstream lines(line);
getline(lines, path, separator);
getline(lines, classlabel);
images.push_back(imread(path, 0));
labels.push_back(atoi(classlabel.c_str()));//atoi(ASCLL to int)将字符串转换为整数型

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0