人脸识别算法c 语言,Opencv LBPH人脸识别算法详解

简要:

LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。

#include

#include

using namespace cv;

using namespace face;

using namespace std;

char win_title[40] = {};

int main(int arc, char** argv) {

//namedWindow("input",CV_WINDOW_AUTOSIZE);

//读入模型需要输入的数据,用来训练的图像vectorimages和标签vectorlabels

string filename = string("path.txt");

ifstream file(filename);

if (!file) { printf("could not load file"); }

vectorimages;

vectorlabels;

char separator = ';';

string line,path, classlabel;

while (getline(file,line)) {

stringstream lines(line);

getline(lines, path, separator);

getline(lines, classlabel);

//printf("%d\n", 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:%d\n", height, width);

//将最后一个样本作为测试样本

Mat testSample = images[images.size() - 1];

int testLabel = labels[labels.size() - 1];

//删除列表末尾的元素

images.pop_back();

labels.pop_back();

//加载,训练,预测

Ptr model = LBPHFaceRecognizer::create();

model->train(images, labels);

int predictedLabel = model->predict(testSample);

printf("actual label:%d,predict label :%d\n", 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:%d\n", radius);

printf("neibs:%d\n", neibs);

printf("grad_x:%d\n", grad_x);

printf("grad_y:%d\n", grad_y);

printf("threshold:%.2f\n", t);

waitKey(0);

return 0;

}

5d7e3ce36b94107e48025cc8eb1ca24d.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值