概述
简要:
LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
#include<opencv2opencv.hpp> #include<opencv2face.hpp> using namespace cv; using namespace face; using namespace std; char win_title[40] = {}; int main(int arc, char** argv) { //namedWindow("input",CV_WINDOW_AUTOSIZE); //读入模型需要输入的数据,用来训练的图像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); //printf("%dn", atoi(classlabel.c_str())); images.push_back(imread(path, 0)); labels.push_back(atoi(classlabel.c_str()));//atoi(ASCLL to int)将字符串转换为整数型 } int height = images[0].rows; int width = images[0].cols; printf("height:%d,width:%dn", height, width); //将最后一个样本作为测试样本 Mat testSample = images[images.size() - 1]; int testLabel = labels[labels.size() - 1]; //删除列表末尾的元素 images.pop_back(); labels.pop_back(); //加载,训练,预测 Ptr<LBPHFaceRecognizer> model = LBPHFaceRecognizer::create(); model->train(images, labels); int predictedLabel = model->predict(testSample); printf("actual label:%d,predict label :%dn", testLabel, predictedLabel); int radius = model->getRadius(); int neibs = model->getNeighbors(); int grad_x = model->getGridX(); int grad_y = model->getGridY(); double t = model->getThreshold(); printf("radius:%dn", radius); printf("neibs:%dn", neibs); printf("grad_x:%dn", grad_x); printf("grad_y:%dn", grad_y); printf("threshold:%.2fn", t); waitKey(0); return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。
最后
以上就是坦率裙子为你收集整理的Opencv LBPH人脸识别算法详解的全部内容,希望文章能够帮你解决Opencv LBPH人脸识别算法详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复