Qt5.7+Opencv2.4.9人脸识别(二)人脸采集
【注意】本博文的檔次適合OpenCV初學(xué)者,和要做本科生畢業(yè)設(shè)計(jì)這類檔次。
源碼的下載地址和原理理論部分請(qǐng)走下面連接
http://blog.csdn.net/qq78442761/article/details/71157980
此節(jié)博文將講述人臉采集!
人臉采集必不可少的是人臉檢測(cè),Opencv提供了haarcascade這個(gè)檢測(cè)這個(gè)檢測(cè)就是存儲(chǔ)了一些值,比如眼睛的顏色比臉頰深,嘴巴的顏色比周圍深。
在此,下面這個(gè)鏈接比較詳細(xì)的說(shuō)明了Opencv人臉檢測(cè),感興趣的同志可以去看看。
http://blog.csdn.net/qq78442761/article/details/61918994
這一節(jié)將實(shí)現(xiàn)的功能如下:
1.點(diǎn)擊功能增加照片后如下圖所示:
輸入姓名后,點(diǎn)擊拍照,按"P"進(jìn)行拍照,拍完10張后,會(huì)在AddData文件夾里面保存剛剛拍下的10張圖片,如下圖所示:
然后在Data目錄下中的people.txt文件夾存儲(chǔ)自動(dòng)生成的id和姓名,如下圖所示:
【注意】此文件是預(yù)先創(chuàng)建好的,采用UTF-8編碼,不要用ASCII,不然Qt Creator 還得對(duì)文件進(jìn)行編碼處理。這里這個(gè)小小的設(shè)置可以少寫很多代碼。
下面講解如何實(shí)現(xiàn)這一功能:
代碼如下,在addpeople.cpp中
void AddPeople::on_TakeAPotoBtn_clicked() {if(ui->NamelineEdit->text()==NULL){QMessageBox::warning(this,tr("錯(cuò)誤"),tr("請(qǐng)輸入姓名"),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; }
這里就實(shí)現(xiàn)了拍照的功能,再調(diào)用std::string filename = cv::format("AddData\\%d.jpg", i+1);就能存儲(chǔ)文件了。
如果在people.txt存儲(chǔ)信息,在上面的代碼中可以可以調(diào)用了file.AddPeople("Data//people.txt",text);
下面就來(lái)看看這個(gè)Addpeople這個(gè)函數(shù):
void MyFILE::AddPeople(QString path,QString text) {QFile file(path);if(!file.open(QIODevice::WriteOnly|QIODevice::Append)){QMessageBox about;about.setText(tr("添加人員時(shí)文件打開失敗"));about.exec();return;}QTextStream in(&file);in.setCodec("UTF-8");in<<text<<"\r\n";file.close(); } 是不是很簡(jiǎn)單呢!
在此,人臉采集結(jié)束了,人臉處理將會(huì)在下一節(jié)說(shuō)明。
源碼和理論部分在本博文開頭有提供。
總結(jié)
以上是生活随笔為你收集整理的Qt5.7+Opencv2.4.9人脸识别(二)人脸采集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android容器相关开发实践
- 下一篇: 计算机在娱乐中的应用有哪些,多媒体技术在