# 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() |