Python 用opencv实现人脸检测 另一种写法

代码:

import sys
import cv2


def _help():
    print("Usage:")
    print("     python video_face_detect_cv.py")
    print("     python video_face_detect_cv.py <path of a video>")
    print("For example:")
    print("     python video_face_detect_cv.py video/lee.mp4")
    print("If the path of a video is not provided, the camera will be used as the input.Press q to quit.")


def _face_detect(color_image, detector):
    # 将彩色图片转换为灰色
    gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)
    # 用detector检测人脸
    face_rects = detector.detectMultiScale(gray_image, scaleFactor=1.2, minNeighbors=3, minSize=(100, 100))

    color = (0, 0, 255)  # 定义绘制颜色为红色
    line_width = 2  # 定义绘图线宽为2
    if (len(face_rects)) > 0:
        for face_rect in face_rects:
            x, y, w, h = face_rect  # (x,y)是矩阵左上角的坐标,w是矩阵的宽,h是矩阵的高
            cv2.rectangle(color_image, (x, y), (x + w, y + h), color, line_width)

    cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
    cv2.imshow("Image", color_image)


def face_detect(video_path=0):
    """
    思路:把视频逐帧分解成图片,基于图片检测标识出人脸的位置,把处理的图片逐帧绘制给用户
    """
    # 获取OpenCV人脸识别分类器
    detector = cv2.CascadeClassifier("D:\Study\python__gongju\opencv-master/data/haarcascades/haarcascade_frontalface_default.xml")
    # 获取视频或者摄像头输入流
    video = 1  # 0代表笔记本自带摄像头  1代表外置的摄像头比如iVCam 也可以地址 比如IP摄像头
    cap = cv2.VideoCapture(video)
    # 逐帧显示
    while True:
        ret, img = cap.read()
        if img is None:
            break
        _face_detect(img, detector)
        # 如果输入的是“q”,则跳出循环结束检测
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()  # 释放摄像头
    cv2.destroyAllWindows()


if len(sys.argv) > 2 or "-h" in sys.argv or "--help" in sys.argv:
    _help()
elif len(sys.argv) == 2:
    face_detect(sys.argv[1])
else:
    face_detect()

 

posted @ 2020-10-23 19:47  凹凸曼大人  阅读(171)  评论(0)    收藏  举报