"""
视频基本处理:
1.从摄像机获取视频
2.创建一个基于摄像头的视频读取流,给定基于第一个视频设备
3.设置摄像头相关参数
4.打印属性
5.便利获取视频中的图像(读取当前时刻的摄像头捕获的图像,返回值:True/False, Image/None)
"""
# 从摄像机获取视频
# 创建一个基于摄像头的视频读取流,给定基于第一个视频设备
capture = cv2.VideoCapture(0)
# 设置摄像头相关参数宽度和高度
success = capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1000)
if success:
print('设置获取视频窗口的宽度已成功!')
success = capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 520)
if success:
print('设置摄像头窗口的高度已成功!')
# 打印属性
size = (
int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
)
print(size)
print(capture.get(cv2.CAP_PROP_FPS)) # 30.0
# 创建一个视频输出对象,设置视频中的帧率,每秒存储多少幅图像
fps = 20 # 每秒存储20张
# 构造了一个视频写入对象 cv2.VideoWriter_fourcc('I', '4', '2', '0') 这个函数调用是用于指定视频文件的编码格式。
# 在这里,'I', '4', '2', '0' 代表一个特定的编码类型,即I420编码,也被称为YUV420格式。这是一种常用的视频编码格式,其中Y代表亮度分量,U和V代表色度分量,采样方式为4:2:0
video_writer = cv2.VideoWriter('V1wsy.avi', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
# 构造10秒输出图像
num_frame = 10 * fps - 1
# 读取初始化摄像头窗口参数、图像帧
success, frame = capture.read()
# 遍历获取视频中的图像(读取当前时刻的摄像头捕获的图像,返回值:True/False, Image/None)
while success and num_frame > 0:
video_writer.write(frame)
success, frame = capture.read()
num_frame -= 1
# cv2.waitKey(1) == -1 ; cv2.waitKey(1)代表一帧一帧读取图像; 键盘不做关闭操作(-1)
# while success and cv2.waitKey(1) == -1:
# cv2.imshow('frame', frame)
# # 读取下一个摄像头窗口及捕获的帧图像
# success, frame = capture.read()
# 释放资源
capture.release()
cv2.destroyAllWindows()
"""
1.读取已有的视频资源
2.设置摄像头捕获视频的窗口参数(高度、宽度)并打印属性
3.设置截取视频变图像,将要保存的路径
4.设置每秒存储多少张
5.遍历视频流并一帧一帧获取图片并保存在之前创建的路径文件下
6.循环结束,释放资源
"""
import os
import cv2
# 3.设置截取视频变图像,将要保存的路径
p = './video'
if not os.path.exists(p):
os.makedirs(p)
# 创建视频流对象
capture = cv2.VideoCapture('V1wsy.avi')
# 设置摄像头捕获视频的窗口参数(高度、宽度)
success = capture.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
if success:
print('设置获取视频窗口的宽度已成功!')
success = capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
if success:
print('设置获取视频窗口的高度已成功!')
# 并打印属性,元组形式表达
size = (
int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
)
print(size)
# # 设置每秒存储多少张
# fps = 20
# 获取当前时刻摄像头捕获的图像,并返回值:T、F
success, frame = capture.read()
k = 0
# 遍历视频流并一帧一帧获取图片并保存在之前创建的路径文件下
while success and cv2.waitKey(60) == -1:
if k % 10 == 0:
cv2.imwrite('./video/img_{}.png'.format(k), frame)
k += 1
# 读取视频流下一帧
success, frame = capture.read()
# 释放资源
capture.release()
cv2.destroyAllWindows()