直接读取本地摄像头 或者 视频文件
读取并写入
import cv2
# 本地摄像头为0 或者是其他设备索引号,也可以是一个视频文件
# cap = cv2.VideoCapture("./1.mp4")
# 读取摄像头的某一帧
# cap.set(cv2.CAP_PROP_POS_FRAMES,50) #设置要获取的帧号
cap = cv2.VideoCapture(0)
# 读取视频的属性
# # cap.get(propId) propId 可以是 0 到 18 之间的任何整数,每一个数代表视频的一个属性
# # cap.get(参数) 3是宽、4是高、7是视频总帧数
# print("{} * {}".format(int(cap.get(3)), int(cap.get(4))))
#
# 获取fps 每秒多少张图片
fps = int(cap.get(cv2.CAP_PROP_FPS))
# 获取视频图像宽、高
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# # 可以指定图像的宽高,但要与写入时一致
# size = (224, 224)
# 生成处理后的视频文件
# 根据原视频,生成新视频文件,
# videoWriter = cv2.VideoWriter('v2.avi', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
# 上面的新版本的opencv会报错,用这个吧
videoWriter = cv2.VideoWriter(name, cv2.VideoWriter_fourcc(*'mp4v'), fps, size)
# '''
# VideoWriter_fourcc()常见的编码参数
# cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # MPEG-4编码 .mp4 可指定结果视频的大小
# cv2.VideoWriter_fourcc('X','2','6','4') # MPEG-4编码 .mp4 可指定结果视频的大小
# cv2.VideoWriter_fourcc('I', '4', '2', '0') # 该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件
# cv2.VideoWriter_fourcc('P', 'I', 'M', 'I') # 该参数是MPEG-1编码类型,文件名后缀为.avi
# cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
# cv2.VideoWriter_fourcc('T', 'H', 'E', 'O') # 该参数是Ogg Vorbis,文件名后缀为.ogv
# cv2.VideoWriter_fourcc('F', 'L', 'V', '1') # 该参数是Flash视频,文件名后缀为.flv
# '''
# .isOpened() 如果为真,说明可以读取
while cap.isOpened():
# 逐帧读取
ret, frame = cap.read()
# 没有下一帧,关闭循环
if not ret:
break
# 转灰度图
# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 垂直反转 1水平翻转、0垂直翻转、-1水平垂直翻转
# frame = cv2.flip(frame, 0)
# 缩放图像(宽、高)
# frame = cv2.resize(frame, size)
# 写入一帧
videoWriter.write(frame)
cv2.imshow('frame', frame)
# 按q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()