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

来源:互联网 发布:淘宝数据查询 编辑:程序博客网 时间:2024/06/05 14: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();}
是不是很简单呢!

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

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

1 0
原创粉丝点击