opencv+人脸识别(识别出来是某个人)

文章来自http://blog.csdn.net/csdn_sxl/article/details/50601168



需要用到OpenCV扩展包里的相关函数,请先编译OpenCV的contrib包。参考:Windows环境中编译opencv3.0同时加入OPENCV_contrib库及解决遇到相关问题


定义相关变量

[cpp]  view plain  copy
  1. vector<Mat> images; //训练样本  
  2. vector<int> labels; //标签,用来标记样本  
  3. QString name[10];   //用来存储姓名,因为标签是整型无法标识姓名  
  4. QString modelXml = "att_model.xml";//用来存储训练好的模型  
  5.   
  6. Ptr<LBPHFaceRecognizer> model = createLBPHFaceRecognizer();  
  7. if(QFile::exists(modelXml)) //加载训练好的模型  
  8. {  
  9.     model->load(modelXml.toStdString());  

  1. }  
训练模型
[cpp]  view plain  copy
  1. images.push_back(imread(imgName.toStdString(),CV_LOAD_IMAGE_GRAYSCALE));  
  2. labels.push_back(ui->labelBox->value());  
  3.       
  4. name[ui->labelBox->value()] = ui->nameEdit->text(); //根据训练标签来存储姓名  
  5.       
  6. model->update(images,labels); //更新训练模型,train()也是训练函数但会清空之前的模型  


人脸识别
[cpp]  view plain  copy
  1. Mat image = imread(imgName.toStdString(), CV_LOAD_IMAGE_GRAYSCALE);//用来识别的图片  
  2.   
  3. model->setThreshold(ui->doubleSpinBox->value()); //设置识别阉值,同一个人训练的图片越多此值可以设置得越小,具体需要自己调试  
  4.   
  5. int result = model->predict(image);//识别并返回匹配的标签  
  6.   
  7. if(result < 0)  
  8.     ui->nameLabel->setText(tr("无法识别此人"));  
  9. else  
  10.     ui->nameLabel->setText(tr("%1").arg(name[result]));//根据返回的标签索引姓名  
保存模型
[cpp]  view plain  copy
  1. model->save(modelXml.toStdString());  



PS:
  • 经测试同一个人用正面,正面偏左、偏右、偏上、偏下五个角度各一张图片训练后阉值设置为85-90识别率比较高
  • 测试用的训练图片可以用ORL人脸库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值