利用python的opencv快速實現人臉檢測

2021-10-13 02:59:58 字數 2113 閱讀 1772

import cv2

def facedetector(window_name, camera_id):

cap = cv2.videocapture(camera_id)

#使用opencv自帶人臉識別分類器,預設在pyhon的安裝目錄下

classfier = cv2.cascadeclassifier("d:\\installsoftware\\python\\python38\\lib\\site-packages\\cv2\\data\\haarcascade_frontalface_alt2.xml")

#識別出人臉後要畫的邊框的顏色,rgb格式

color = (0, 255, 0)

while cap.isopened():

ret, frame = cap.read()

if not ret:

break

#調整幀的大小

#定義攝像頭採集的影象比例係數

scaling_factor = 0.5

frame = cv2.resize(frame,none,fx=scaling_factor,fy=scaling_factor,interpolation=cv2.inter_area)

#將當前幀轉換成灰度影象

grey = cv2.cvtcolor(frame, cv2.color_bgr2gray)

#人臉檢測1.3和4分別為每次縮放比例和需要檢測的有效點數

facerects = classfier.detectmultiscale(grey, scalefactor=1.1,minneighbors=4,minsize=(32,32))

#大於0則檢測到人臉

if len(facerects) > 0:

#在識別到的多個人臉中框出一張人臉

for facerect in facerects:

x, y, w, h = facerect

cv2.rectangle(frame,(x,y),(x+w,y+h),color,2)

#將一幀影象顯示出來

cv2.imshow(window_name, frame)

#每次等待1ms 當esc按鍵被按下時退出顯示

#esc按鍵對應的鍵值為27

if (cv2.waitkey(1) & 0xff) == 27:

break

cap.release()

#關閉所以的活動視窗

cv2.destroyallwindows()

if __name__ == '__main__':

facedetector("face detector", 700)

以上**並不複雜,主要備註一下detectmultiscale方法的引數:

detectmultiscale函式介紹

引數2:objects--被檢測物體的矩形框向量組;

引數3:scalefactor--表示在前後兩次相繼的掃瞄中,搜尋視窗的比例係數。預設為1.1即每次搜尋視窗依次擴大10%(簡單理解就是分類器每次在中識別完成後會將縮小一定比例,對應的人臉也會變小,再一次遍歷識別進而增加識別到的機率);

引數4:minneighbors--表示構成檢測目標的相鄰矩形的最小個數(預設為3個)。如果組成檢測目標的小矩形的個數和小於 min_neighbors - 1 都會被排除。如果min_neighbors 為 0, 則函式不做任何操作就返回所有的被檢候選矩形框,這種設定值一般用在使用者自定義對檢測結果的組合程式上(簡單理解為在同一區域內識別到人臉的次數大於等於設定值時,則判斷為識別到了有效人臉);

引數5:flags--要麼使用預設值,要麼使用cv_haar_do_canny_pruning,如果設定為cv_haar_do_canny_pruning,那麼函式將會使用canny邊緣檢測來排除邊緣過多或過少的區域,因此這些區域通常不會是人臉所在區域;

引數6、7:minsize和maxsize用來限制得到的目標區域的範圍(無需多言)。

利用anaconda安裝OpenCV

然後一步步安裝,簡單入門教程 利用anaconda安裝opencv 開啟anaconda prompt 在此終端中進行換源,切換到清華的映象源 conda config add channels conda config add channels conda config set show chan...

利用OpenCV提取目標輪廓

乙個簡單的提取飛機目標影象 二值圖 輪廓的程式 include include include include iplimage g image null iplimage g gray null int g thresh 100 cvmemstorage g storage null char n...

利用opencv檢測出矩形

pragma once include troot.h include cbintoprofile.h include th1.h include cbmpdiff.h include ccircletopeak.h include ccolorcut.h include ccubicbspline...