乙個OpenCV實現的人臉檢測的原始碼

2021-07-11 18:21:32 字數 3975 閱讀 1565

直接在qt pro檔案裡面加上

config(release,debug|release)
config(debug,debug|release)
我這麼寫是因為我的計算機是64位的。
實驗原始碼如下:
#include

"mainwindow.h"

#include

#include

#include

#include

#include

#include

using

namespace

cv;

void

detectanddraw(

mat&img,

cascadeclassifier&cascade,

cascadeclassifier&nestedcascade,

double

scale,

bool

tryflip);

int

main(int

argc,

char

*argv)

matframe;

matedges;

cascadeclassifier

cascade,nestedcascade;

bool

stop=

false;

//訓練好的檔名稱,放置在可執行檔案同目錄下

cascade.load("haarcascade_frontalface_alt.xml");
nestedcascade.load("haarcascade_eye_tree_eyeglasses.xml");

while(!stop)

return

0;

}
void

detectanddraw(

mat&img,

cascadeclassifier&cascade,

cascadeclassifier&nestedcascade,

double

scale,

bool

tryflip)

;

//建立縮小的,加快檢測速度

//nt

cvround

(double

value)

對乙個double型的數進行四捨五入,並返回乙個整型數!

matgray,smallimg(cvround(img.rows/scale),cvround(img.cols/scale),

cv_8uc1

);

//轉成灰度影象,harr特徵基於灰度圖

cvtcolor(img,gray,

cv_bgr2gray

);

//改變影象大小,使用雙線性差值

resize(gray,smallimg,smallimg.size(),

0,0,

inter_linear

);

//變換後的影象進行直方圖均值化處理

equalizehist(smallimg,smallimg);

//程式開始和結束插入此函式獲取時間,經過計算求得演算法執行時間

t=(double)cvgettickcount();

//檢測人臉

//detectmultiscale函式中smallimg表示的是要檢測的輸入影象為smallimg,faces表示檢測到的人臉目標序列,1.1表示

//每次影象尺寸減小的比例為1.1,2表示每乙個目標至少要被檢測到3次才算是真的目標(因為周圍的畫素和不同的視窗大

//小都可以檢測到人臉),cv_haar_scale_image表示不是縮放分類器來檢測,而是縮放影象,size(30,

30)為目標的

//最小最大尺寸

cascade.detectmultiscale(smallimg,faces,

1.1,

2,0

//|cv_haar_find_biggest_object

//|cv_haar_do_rough_search

|cv_haar_scale_image
,

size(30,

30));

//如果使能,翻轉影象繼續檢測

if(tryflip)

}
t=(double)cvgettickcount()-t;

//qdebug(

"detection

time=%g

ms\n",

t/((double)cvgettickfrequency()*1000.)

);

for(

vector

::const_iterator

r=faces.begin();r!=faces.end();r++,i++)

else

rectangle(img,cvpoint(cvround(r->x*scale),cvround(r->y*scale)),
cvpoint(cvround((r->x+r->width-1)*scale),cvround((r->y+r->height-1)*scale)),
color,

3,8,

0);

if(nestedcascade.empty())

continue;

smallimgroi=smallimg(*r);

//同樣方法檢測人眼

nestedcascade.detectmultiscale(smallimgroi,nestedobjects,

1.1,

2,0

//|cv_haar_find_biggest_object

//|cv_haar_do_rough_search

//|cv_haar_do_canny_pruning

|cv_haar_scale_image
,

size(30,

30));

for(

vector

::const_iterator

nr=nestedobjects.begin();nr!=nestedobjects.end();nr++)

}

cv::imshow(

"result",img);

}

基於opencv的人臉檢測學習(一)

人臉檢測是指檢測並定位到指定影象中的人臉,並且返回高精度的人臉框座標。目前的人臉檢測方法大致可分為兩類 基於知識和基於統計 基於知識的方法 將人臉看作器官特徵的組合,根據面部器官的特徵和幾何位置關係來檢測人臉。例如模板匹配 人臉特徵 形狀與邊緣 紋理特徵 顏色特徵等方法。基於統計的方法 將人臉看作二...

基於OpenCV的簡單的人臉檢測

這個是在數字影象處理課程裡面的乙個小實踐內容。參考網上已有 重新配置編譯,效果不錯。人臉識別的庫使用的是haarcascade frontalface檔案,包含在opencv當中的。關鍵部分 如下 本原始碼只為學習交流之用 typersever from gzhu static cvmemstora...

基於opencv3的人臉檢測

目前opencv3中已經有人臉檢測的類了,只要呼叫函式庫的類就行 該程式需要兩個xml檔案,分別是haarcascade frontalface alt.xml和haarcascade eye tree eyeglasses.xml,它們分別是已經通過了大量訓練且能檢測出人臉和眼睛了,只要呼叫即可。...