日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

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

發(fā)布時間:2025/3/15 pytorch 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt5.7+Opencv2.4.9人脸识别(三)人脸处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【注意】本博文的檔次適合OpenCV初學者,和要做本科生畢業(yè)設計這類檔次。

上一節(jié)是人臉采集,鏈接如下:

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


源碼的下載地址和原理理論部分請走下面連接

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


本節(jié)講解Opencv中的人臉處理,

功能如下:

當我們點擊了功能里面的照片處理后,如下所示:


并且在Data目錄下,可以看見生成了一個對應的文件夾,這個文件夾和peopel.txt里面的標識對應,如下圖所示:


下面來看代碼

void AddPeople::disposePic() {file.CreateFile(QString::number( MaxNumAboutPeople,10));QString sourceFilePath="addData\\";QString targetFilePath="Data\\"+QString::number(MaxNumAboutPeople,10);targetFilePath.append("\\");QString sourceFile;QString targetFile;for(int i=0;i<10;i++){sourceFile.append(sourceFilePath+QString::number(i+1,10));sourceFile.append(".jpg");targetFile.append(targetFilePath);targetFile.append(QString::number(i,10));targetFile.append(".jpg");this->detectAndDisplay(sourceFile,targetFile);sourceFile.clear();targetFile.clear();} } 這是創(chuàng)建文件夾的代碼,是不是很簡單呢?其實就是調(diào)用了file.h,我們現(xiàn)在進入file.h和file.cpp來看看

如果創(chuàng)建文件夾:

void MyFILE::CreateFile(QString fileName) {PicFile=new QDir;QString path="Data\\"+fileName;if(PicFile->exists(path)){QMessageBox about;about.setText(tr("文件夾創(chuàng)建失敗"));about.exec();}else{if(PicFile->mkdir(path)){QMessageBox about;about.setText(tr("文件夾創(chuàng)建成功"));about.exec();}} }
而關于存儲圖像和處理在detectAndDisplay(sourceFile,targetFile);這個函數(shù)中。

現(xiàn)在來看此函數(shù):

void AddPeople::detectAndDisplay(QString source, QString target) {std::string face_cascade_name = "haarcascade_frontalface_alt.xml";cv::CascadeClassifier face_cascade; //定義人臉分類器cv::Mat frame = cv::imread(source.toStdString());if(!frame.data){qDebug()<<source;QMessageBox::warning(this,tr("提示"),tr("frame讀取失敗"),QMessageBox::Ok);return;}if (!face_cascade.load(face_cascade_name)){QMessageBox::warning(this,tr("錯誤"),tr("haarcascade_frontalface_alt.xml加載失敗"),QMessageBox::Ok);return;}std::vector<cv::Rect> faces;cv::Mat img_gray;cv::cvtColor(frame, img_gray, cv::COLOR_BGR2GRAY);cv::equalizeHist(img_gray, img_gray);face_cascade.detectMultiScale(img_gray, faces, 1.1, 3, CV_HAAR_DO_ROUGH_SEARCH, cv::Size(50, 50));for (int j = 0; j < (int)faces.size(); j++){cv::Mat faceROI = frame(faces[j]);cv::Mat MyFace;cv::Mat gray_MyFace;if (faceROI.cols > 100){cv::resize(faceROI, MyFace, cv::Size(92, 112));cv::cvtColor(MyFace, gray_MyFace, CV_BGR2GRAY);imwrite(target.toStdString(), gray_MyFace);}} }
這里的代碼說白了就是調(diào)用haarcascade找人臉,分割人臉,然后進行灰度處理,和直方圖均衡化,然后進行imwrite保存文件。

進行灰度處理,和直方圖均衡化是為了訓練模型時減少計算,減少冗余信息對識別的影響,提供識別準確度。


10張圖片處理完畢了,下面我們生成csv文件。

csv也就是逗號分割的文件,也就是說,我們有10張圖,如果10個人就100張圖,為了操作方便,為何不用一個文件把這些圖的路徑和人臉的標號放在一起,讓Opencv直接讀取,這樣才方便。

當點擊生成csv后如下圖所示:

這個at.txt文件是預先創(chuàng)建好的。

其實功能就是把相對路徑換成絕對路徑,方便Opencv進行讀取。這里有個坑要注意,Opencv中讀取csv文件只能是ASCII編碼,如果不是ASCII將讀取不了,如下圖所示:


現(xiàn)在來看代碼,如何完成這樣的工作:

void AddPeople::AddCSV() {file.MakecsvFile(); }在Addpeople中AddCSV調(diào)用了file.MakecsvFile,現(xiàn)在進去看他具體的代碼:

void MyFILE::MakecsvFile() {QDir csvFile("./Data/at.txt");QString csvPath=csvFile.absolutePath();QString csvFilePath=csvPath;csvPath.chop(6);QString path=csvPath+QString::number(MaxNumAboutPeople,10)+"/";for(int i=0;i<10;i++){QString filepath=path;filepath.append(QString::number(i,10));filepath.append(".jpg;");filepath.append(QString::number(MaxNumAboutPeople,10));//this->AddPeople(csvFilePath,filepath);QFile file(csvFilePath);if(!file.open(QIODevice::WriteOnly|QIODevice::Append)){QMessageBox about;about.setText(tr("添加人員時文件打開失敗"));about.exec();return;}QTextStream in(&file);//in.setCodec("UTF-8");in<<filepath<<"\r\n";file.close();} }
是不是和上一節(jié)創(chuàng)建文件一樣簡單呢!

下一節(jié)將說明模型訓練!
源碼和理論部分在本博文開頭有提供。



總結

以上是生活随笔為你收集整理的Qt5.7+Opencv2.4.9人脸识别(三)人脸处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。