Qt5.7+Opencv2.4.9人脸识别(二)人脸采集

原创 2017年05月04日 10:44:22

【注意】本博文的档次适合OpenCV初学者,和要做本科生毕业设计这类档次。

源码的下载地址和原理理论部分请走下面连接

http://blog.csdn.net/qq78442761/article/details/71157980


此节博文将讲述人脸采集!

人脸采集必不可少的是人脸检测,Opencv提供了haarcascade这个检测这个检测就是存储了一些值,比如眼睛的颜色比脸颊深,嘴巴的颜色比周围深。

在此,下面这个链接比较详细的说明了Opencv人脸检测,感兴趣的同志可以去看看。

http://blog.csdn.net/qq78442761/article/details/61918994



这一节将实现的功能如下:

1.点击功能增加照片后如下图所示:


输入姓名后,点击拍照,按"P"进行拍照,拍完10张后,会在AddData文件夹里面保存刚刚拍下的10张图片,如下图所示:



然后在Data目录下中的people.txt文件夹存储自动生成的id和姓名,如下图所示:


【注意】此文件是预先创建好的,采用UTF-8编码,不要用ASCII,不然Qt Creator 还得对文件进行编码处理。这里这个小小的设置可以少写很多代码。


下面讲解如何实现这一功能:

代码如下,在addpeople.cpp中

void AddPeople::on_TakeAPotoBtn_clicked()
{
    if(ui->NamelineEdit->text()==NULL)
    {
        QMessageBox::warning(this,tr("错误"),tr("请输入姓名"),QMessageBox::Ok);
    }
    else
    {
        ui->NamelineEdit->setEnabled(false);
        ui->TakeAPotoBtn->setEnabled(false);
        capture=new cv::VideoCapture(0);
        int i=0;
        while (i!=10)
        {
            char key = cv::waitKey(100);
            *capture >> frame;
            imshow("frame", frame);
            std::string filename = cv::format("AddData\\%d.jpg", i+1);

            switch (key)
            {
            case'p':
                i++;
                imwrite(filename, frame);
                imshow("photo", frame);
                cv::waitKey(500);
                cv::destroyWindow("photo");
                break;
            default:
                break;
            }
        }
        capture->release();
        cv::destroyWindow("frame");
        ui->NamelineEdit->setEnabled(true);
        ui->TakeAPotoBtn->setEnabled(true);
    }
    int i=file.GetMaxNum("Data//people.txt");
    //qDebug()<<i<<endl;
    QString text=QString::number(i,10)+" "+ui->NamelineEdit->text();
    file.AddPeople("Data//people.txt",text);
    MaxNumAboutPeople=i;
}

这里就实现了拍照的功能,再调用std::string filename = cv::format("AddData\\%d.jpg", i+1);就能存储文件了。

如果在people.txt存储信息,在上面的代码中可以可以调用了file.AddPeople("Data//people.txt",text);

下面就来看看这个Addpeople这个函数:

void MyFILE::AddPeople(QString path,QString text)
{
    QFile file(path);
    if(!file.open(QIODevice::WriteOnly|QIODevice::Append))
    {
        QMessageBox about;
        about.setText(tr("添加人员时文件打开失败"));
        about.exec();
        return;
    }
    QTextStream in(&file);
    in.setCodec("UTF-8");
    in<<text<<"\r\n";
    file.close();
}
是不是很简单呢!

在此,人脸采集结束了,人脸处理将会在下一节说明。

源码和理论部分在本博文开头有提供。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Qt5.7+Opencv2.4.9人脸识别(一)项目介绍

Qt5.7+Opencv2.4.9人脸识别(一)项目介绍
  • qq78442761
  • qq78442761
  • 2017年05月04日 09:58
  • 8449

QT5+OpenCV人脸识别

本文介绍使用OpenCV扩展包里的人脸识别
  • CSDN_SXL
  • CSDN_SXL
  • 2017年04月01日 14:19
  • 9694

基于QT人脸识别

  • 2014年02月24日 16:51
  • 8KB
  • 下载

基于opencv和QT的人脸(人眼)检测程序

本篇博客是在作者的上一篇博客《 基于QT和opencv的摄像头(本地图片)读取并输出程序》的基础上进行开发的,利用opencv自带的分类器进行人脸或者人眼的识别。         在上一篇博客里,我们...
  • zyx1990412
  • zyx1990412
  • 2016年04月21日 10:49
  • 2664

Qt5.7+Opencv2.4.9人脸识别(五)人脸识别

Qt5.7+Opencv2.4.9人脸识别(五)人脸识别
  • qq78442761
  • qq78442761
  • 2017年05月04日 11:48
  • 4899

qt+opencv+人脸识别

  • 2016年12月21日 15:20
  • 18.8MB
  • 下载

Qt5.7+Opencv2.4.9人脸识别(三)人脸处理

Qt5.7+Opencv2.4.9人脸识别(三)人脸处理
  • qq78442761
  • qq78442761
  • 2017年05月04日 11:20
  • 4816

Qt+Caffe+OpenCV——【一个基于VGG网络的人脸识别考勤系统】(二)创建一个登录界面和主窗口

前言本次重点阐述在http://blog.csdn.net/mr_curry/article/details/53859654《Qt+Caffe+OpenCV——【一个基于VGG网络的人脸识别考勤系统...
  • Mr_Curry
  • Mr_Curry
  • 2017年01月06日 20:45
  • 4047

基于QT和OpenCV的人脸检测识别系统(2)

紧接着上一篇博客的讲 第二步是识别部分 人脸识别 把上一阶段检测处理得到的人脸图像与数据库中的已知 人脸进行比对,判定人脸对应的人是谁(此处以白色文本显示)。   人脸预处理 现...
  • chenaini119
  • chenaini119
  • 2014年10月12日 15:08
  • 2336

QT5+OpenCV人脸、人眼检测

一:在QLabel上显示Mat图像 void showMat(Mat mat) { Mat rgb; QImage img; if(mat.channels() == 3) ...
  • CSDN_SXL
  • CSDN_SXL
  • 2016年01月28日 13:48
  • 8318
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt5.7+Opencv2.4.9人脸识别(二)人脸采集
举报原因:
原因补充:

(最多只允许输入30个字)