利用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 篇原创文章 · 获赞 17 · 访问量 2992

猜你喜欢

转载自blog.csdn.net/qq_35027690/article/details/103458187