第一步:opencv裡面人臉檢測的方法
在opencv中,人臉檢測用的是harr或lbp特徵,分類演算法用的是adaboost演算法。這種演算法需要提前訓練大量的,非常耗時,因此opencv已經訓練好了,把訓練結果存放在一些xml檔案裡面。
上圖中資料夾的名字「haarcascades」、「hogcascades」和「lbpcascades」分別表示通過「haar」、「hog」和「lbp」三種不同的特徵而訓練出的分類器:即各資料夾裡的檔案。"haar"特徵主要用於人臉檢測,「hog」特徵主要用於行人檢測,「lbp」特徵主要用於人臉識別。開啟「haarcascades」資料夾,如下圖所示
圖中的xml檔案即是我們人臉檢測所需要的分類器檔案。在實際使用中,推薦使用上圖中被標記的「haarcascade_frontalface_alt2.xml」分類器檔案,準確率和速度都比較好。
第二步:用的類與函式
人臉檢測主要用到的是cascadeclassifier這個類,以及該類下的detectmultiscale函式。
函式原型是:
void cascadeclassifier::detectmultiscale(inputarray image, vector& objects, double scalefactor=1.1, int minneighbors=3, int flags=0, size minsize=size(), size maxsize=size())總共有7個引數,分別是
第乙個引數image: 要檢測的,一般為灰度圖
第二個引數objects: rect型的容器,存放所有檢測出的人臉,每個人臉是乙個矩形
第三個引數scalefactor: 縮放因子,對進行縮放,預設為1.1
第四個引數minneighbors: 最小鄰居數,預設為3
第五個引數flags: 相容老版本的乙個引數,在3.0版本中沒用處。預設為0
第六個引數minsize: 最小尺寸,檢測出的人臉最小尺寸
第七個引數maxsize: 最大尺寸,檢測出的人臉最大尺寸
第三步:程式
#include#include#include#include using namespace std;
using namespace cv;
int main()
imshow("faces",img);
waitkey(0);
return 1;
}
第四步:執行程式,出現的效果 基於opencv3的人臉檢測
目前opencv3中已經有人臉檢測的類了,只要呼叫函式庫的類就行 該程式需要兩個xml檔案,分別是haarcascade frontalface alt.xml和haarcascade eye tree eyeglasses.xml,它們分別是已經通過了大量訓練且能檢測出人臉和眼睛了,只要呼叫即可。...
opencv3 人臉識別 不同顏色圓圈 圈出
原 include include include include using namespace cv using namespace std void detectanddraw mat img,cascadeclassifier cascade,cascadeclassifier nested...
opencv3人臉識別問題解決
最近實現人臉識別,由於採用的是opencv3,而opencv3的人臉識別庫等contrib模組已經不再內建了。而這個模組要用cmake進行編譯,詳情可以參考其它博主的文章 整個contrib模組是很大的,而我只想使用其中的人臉識別模組,即face,我又對cmake不太熟悉,所以我用了乙個直接匯入標頭...