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()
如果人生还有重来,那就不叫人生。