最近有空對學習下opencv的東西,本篇主要記錄對人臉檢測實現,而人臉檢測是為人臉識別做準備。opencv版本:3.3.0
環境:vs2015
void cascadeclassifier::detectmultiscale(inputarray image,
vector& objects,
double scalefactor=1.1,
int minneighbors=3,
int flags=0,
size minsize=size(),
size maxsize=size());
minsize:檢測視窗的最小值
maxsize:監測視窗的最大值
人臉檢測的過程其實也就是乙個分類的過程,cascadeclassifier是opencv中人臉檢測的乙個級聯分類器。opencv中目標檢測是使用haar分類器來實現的(後面也使用了lbp特徵),這是一種監督學習分類器,使用的是adaboost演算法。adaboost演算法的基本過程是對給定的訓練樣本進行訓練得到弱分類器,然後通過多個弱分類器進行加權疊加得到強分類器。弱分類器和強分類器與若學習和強學習對應,弱學習是指學習演算法的識別率只是比隨機識別稍好;強學習是指學習演算法識別概率很高。
opencv為我們提供了方便api,我們只要呼叫就可以快速實現人臉檢測,過程主要是:
讀取 -> 轉化成灰度圖 -> 對灰度圖進行直方圖均衡化 -> 呼叫detectmultiscale進行人臉檢測 -> 將結果轉化**臉識別需要的訓練集格式
#include#include#include#include#include#includeusing namespace std;
using namespace cv;
string face_config_name = "d:/whz_tools/opencv/opencv/vc14x64/etc/haarcascades/haarcascade_frontalface_default.xml";
cascadeclassifier face_cascade;
vector> faces;
int main()
/*也可以不調整大小,直接在原圖中畫出矩形
point p1 = point(faces[i].x, faces[i].y);
point p2 = point(faces[i].x + faces[i].width, faces[i].y + faces[i].height);
rectangle(img, p1, p2, scalar(255, 0, 0), 2, 8, 0);*/}
}
}return 0;
}
對於上面的**進行如下說明:
這裡希望能夠自動化處理採集的影象,因此需要自動獲取目錄下的檔名,然後根據檔名自動處理每個影象。也就是上面**中get_files
函式:
#include#include#includeusing namespace std;
/*獲取目錄下的檔名*/
void get_files(string file_path, vector& files)
else
}_findclose(file_handler);
}
獲取目錄下的檔案中的關鍵的結構是_finddata_t
,定義在io.h標頭檔案中:
struct _finddata_t
;
該結構用來儲存檔案資訊,而查詢就需要靠_findfirst
,_findnext
,_fineclose
:
/*@return 若查詢成功,將返回long型的檔案控制代碼,該控制代碼在_findnext中使用;若失敗則返回-1;
@param filespec:檔名,支援萬用字元;
@param fileinfo:存放檔案資訊的結構體指標;*/
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
/*@return 若成功返回0,否則返回-1;
@param handle:_findfirst返回的檔案控制代碼
@param fileinfo:存放檔案資訊的結構體指標,找到檔案後放入此結構;*/
int _findnext( long handle, struct _finddata_t *fileinfo );
/*@return 結束查詢,若成功返回0,否則返回-1;
@param handle:_findfirst返回的檔案控制代碼*/
int _findclose( long handle );
當程式執行結束時就可以得到92 * 112的人臉影象,可以進行後續的人臉識別了! OpenCV人臉檢測
include include include include include include include include include include static cvmemstorage storage 0 建立乙個記憶體儲存器,來統一管理各種動態物件的記憶體 static cvhaar...
OpenCV人臉檢測
win7 32位 opencv3.0 vs2013 對資料夾中進行人臉檢測 在opencv中,人臉檢測用的是harr或lbp特徵,分類演算法用的是adaboost演算法。這種演算法需要提前訓練大量的,非常耗時,因此opencv已經訓練好了,把訓練結果存放在一些xml檔案裡面。在opencv3.0版本...
OpenCV人臉檢測
import cv2 import matplotlib.pyplot as plt 讀取 的人臉檢測 img cv2.imread data face.jpg 1 讀取一張 gray cv2.cvtcolor img,cv2.color bgr2gray 將轉化成灰度 face cascade c...