opencv人臉檢測

2021-08-13 04:47:14 字數 2493 閱讀 4196

最近有空對學習下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...