Opencv LBPH人臉識別算法詳解
簡要:
LBPH(Local Binary PatternsHistograms)局部二進制編碼直方圖,建立在LBPH基礎(chǔ)之上的人臉識別法基本思想如下:首先以每個像素為中心,判斷與周圍像素灰度值大小關(guān)系,對其進行二進制編碼,從而獲得整幅圖像的LBP編碼圖像;再將LBP圖像分為個區(qū)域,獲取每個區(qū)域的LBP編碼直方圖,繼而得到整幅圖像的LBP編碼直方圖,通過比較不同人臉圖像LBP編碼直方圖達到人臉識別的目的,其優(yōu)點是不會受到光照、縮放、旋轉(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í)有所幫助,也希望大家多多支持我們。
上一篇:c++語言中虛函數(shù)實現(xiàn)多態(tài)的原理詳解
欄 目:C語言
本文標(biāo)題:Opencv LBPH人臉識別算法詳解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/295.html
您可能感興趣的文章
- 01-10實現(xiàn)opencv圖像裁剪分屏顯示示例
- 01-10使用opencv拉伸圖像擴大分辨率示例
- 01-10基于C++實現(xiàn)kinect+opencv 獲取深度及彩色數(shù)據(jù)
- 01-10淺談CMake配置OpenCV 時靜態(tài)鏈接與動態(tài)鏈接的選擇
- 01-10OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法
- 01-10visual studio 2013中配置opencv圖文教程 Opencv2.4.9安裝配置教程
- 01-10OPENCV批量讀取圖片實現(xiàn)方法
- 01-10Opencv學(xué)習(xí)教程之漫水填充算法實例詳解
- 01-10Opencv基于CamShift算法實現(xiàn)目標(biāo)跟蹤
- 01-10OpenCV實現(xiàn)人臉檢測


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery