利用opencv內置分類器進行人臉檢測

參考博客:(人臉識別2-2)——利用opencv內置分類器檢測人臉
在cv2的源碼文件夾下,可看到存放了很多的已經訓練好的分類器,我們可進行替換來嘗試。
在這裏插入圖片描述
注意代碼中的路徑爲從cv2的路徑。

# -*-coding:utf-8 -*-
import cv2


def facedetect(windowname, camera_id):
    # 命名和打開攝像頭,詳情見上一篇
    cv2.namedWindow(windowname)

    cap = cv2.VideoCapture(camera_id)  # 獲取攝像頭
    # cap = cv2.VideoCapture('H:/video.m4s')  #通過本地的視頻進行測試

    classfier = cv2.CascadeClassifier(
        'G:/annconda/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')  # 加載分類器,分類器位置可以自行更改

    color = (0, 0, 255)  # 人臉框的顏色,採用rgb模型,這裏表示g取255,爲綠色框

    while cap.isOpened():
        ok, frame = cap.read()
        if not ok:
            break

        grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 圖像灰度化

        faceRects = classfier.detectMultiScale(grey, scaleFactor=1.15, minNeighbors=5,
                                               minSize=(5, 5))  # 利用分類器檢測灰度圖像中的人臉矩陣數,1.15和5分別爲圖片縮放比例和需要檢測的有效點數

        if len(faceRects) > 0:  # 大於0則檢測到人臉
            for faceRect in faceRects:  # 單獨框出每一張人臉
                x, y, w, h = faceRect  # 獲取框的左上的座標,框的長寬

                cv2.rectangle(frame, (x, y), (x + w, y + h), color, 3)  # 用矩形框框出人臉

        cv2.imshow(windowname, frame)  # 顯示圖像
        c = cv2.waitKey(1)  # 每10ms一幀
        if c & 0xFF == ord('q'):  # 退出條件
            break

    cap.release()  # 釋放攝像頭並銷燬所有窗口
    cv2.destroyAllWindows()


if __name__ == '__main__':  # 主程序
    print('face detecting... ')
    facedetect('facedetect', 0)
發佈了61 篇原創文章 · 獲贊 19 · 訪問量 6115
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章