Qt5.7+Opencv2.4.9人脸识别(二)人脸采集
【注意】本博文的檔次適合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人脸识别(二)人脸采集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android容器相关开发实践
- 下一篇: Qt5.7+Opencv2.4.9人脸识