Opencv LBPH人臉識別算法詳解
簡要:
LBPH(Local Binary PatternsHistograms)局部二進(jìn)制編碼直方圖,建立在LBPH基礎(chǔ)之上的人臉識別法基本思想如下:首先以每個像素為中心,判斷與周圍像素灰度值大小關(guān)系,對其進(jìn)行二進(jìn)制編碼,從而獲得整幅圖像的LBP編碼圖像;再將LBP圖像分為個區(qū)域,獲取每個區(qū)域的LBP編碼直方圖,繼而得到整幅圖像的LBP編碼直方圖,通過比較不同人臉圖像LBP編碼直方圖達(dá)到人臉識別的目的,其優(yōu)點(diǎn)是不會受到光照、縮放、旋轉(zhuǎn)和平移的影響。
#include<opencv2\opencv.hpp>
#include<opencv2\face.hpp>
using namespace cv;
using namespace face;
using namespace std;
char win_title[40] = {};
int main(int arc, char** argv) {
//namedWindow("input",CV_WINDOW_AUTOSIZE);
//讀入模型需要輸入的數(shù)據(jù),用來訓(xùn)練的圖像vector<Mat>images和標(biāo)簽vector<int>labels
string filename = string("path.txt");
ifstream file(filename);
if (!file) { printf("could not load file"); }
vector<Mat>images;
vector<int>labels;
char separator = ';';
string line,path, classlabel;
while (getline(file,line)) {
stringstream lines(line);
getline(lines, path, separator);
getline(lines, classlabel);
//printf("%d\n", atoi(classlabel.c_str()));
images.push_back(imread(path, 0));
labels.push_back(atoi(classlabel.c_str()));//atoi(ASCLL to int)將字符串轉(zhuǎn)換為整數(shù)型
}
int height = images[0].rows;
int width = images[0].cols;
printf("height:%d,width:%d\n", height, width);
//將最后一個樣本作為測試樣本
Mat testSample = images[images.size() - 1];
int testLabel = labels[labels.size() - 1];
//刪除列表末尾的元素
images.pop_back();
labels.pop_back();
//加載,訓(xùn)練,預(yù)測
Ptr<LBPHFaceRecognizer> model = LBPHFaceRecognizer::create();
model->train(images, labels);
int predictedLabel = model->predict(testSample);
printf("actual label:%d,predict label :%d\n", testLabel, predictedLabel);
int radius = model->getRadius();
int neibs = model->getNeighbors();
int grad_x = model->getGridX();
int grad_y = model->getGridY();
double t = model->getThreshold();
printf("radius:%d\n", radius);
printf("neibs:%d\n", neibs);
printf("grad_x:%d\n", grad_x);
printf("grad_y:%d\n", grad_y);
printf("threshold:%.2f\n", t);
waitKey(0);
return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言中的函數(shù)指針基礎(chǔ)學(xué)習(xí)教程
C++實(shí)現(xiàn)數(shù)組的排序/插入重新排序/以及逆置操作詳解
Qt掃盲篇之QRegularExpression正則匹配總結(jié)
在Qt中使用QtWebApp搭建HTTP服務(wù)器的詳細(xì)步驟

