[python]代码库
# coding=utf-8
import cv2
# 如果是对视频进行检测,那么替换下面语句
cap = cv2.VideoCapture('a.avi')
# 通过摄像头检测自己的人脸
# cap = cv2.VideoCapture(0)
# 获得摄像头帧大小
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + 1
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + 1
# 保存文件的格式
videoWriter = cv2.VideoWriter('b.avi', cv2.VideoWriter_fourcc('M', 'P', '4', '2'), 24, (w, h))
# 自适应窗口大小
cv2.namedWindow('video', cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
# 查看视频一秒多少帧 1000/20=50
# print(cap.get(propId=cv2.CAP_PROP_FPS))
# 一共多少帧 2701.0
# print(cap.get(propId=cv2.CAP_PROP_FRAME_COUNT))
# 人脸数据,级联分类器,给人脸特征数据,返回可以识别人脸的对象
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
while cap.isOpened():
# 获得每帧数据
flag, frame = cap.read()
if flag == False:
break
# 转化为灰度图像
gray = cv2.cvtColor(frame, code=6)
# 人脸检测获得图像区域
face_zone = detector.detectMultiScale(gray)
# 针对人脸区域画图
for x, y, w, h in face_zone:
cv2.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 0, 255], thickness=2)
# 写入视频流中
videoWriter.write(frame)
if flag == False:
break
cv2.imshow('video', frame)
# 按q退出
if ord('q') == cv2.waitKey(5):
break
cv2.destroyAllWindows()
cap.release()
videoWriter.release()