基於qt和opencv3人臉檢測

2021-07-31 02:18:22 字數 1511 閱讀 7785

第一步: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不太熟悉,所以我用了乙個直接匯入標頭...