57. 视频分解与合成
2019-11-13 本文已影响0人
十里江城
本文开始机器学习部分知识的解释,以下为视频分解图片与图片合成视频的操作。
视频分解
步骤:
- 捕获视频并检测打开与否
- 获取视频帧率等信息
- 读取每一帧
- 将图片按序按帧率存(读)为jpg文件
import cv2
# 1 捕获视频并检测打开与否
cap = cv2.VideoCapture('1.mp4')
# 检测是否打开
isOpened = cap.isOpened
print('isOpened: ', isOpened)
# 2 获取视频帧率等信息
# 帧率:表示一秒钟可以打开的图片个数
fps = cap.get(cv2.CAP_PROP_FPS)
width = (cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = (cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print('fps, width, height: ', fps, width, height)
i = 0
while(isOpened):
# 最多保存十张图片 fps=24
if i == 30:
break
else:
i += 1
# 3 读取每一帧 flag:是否成功 frame:图片内容
(flag, frame) = cap.read()
# 4 将图片按序按帧率存为jpg文件
# 定义30张图片的文件名
fileName = 'image' + str(i) + '.jpg'
print('fileName: ', fileName)
if flag == True:
cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY, 100])
print('end!')
状态与帧率等信息和分解结果如下:
状态和帧率等信息 分解出的部分图片
视频合成
步骤:
- 获取图片维度信息
- 创建视频写入对象
- 将读入的图片写入视频
- 释放videoWriter结束视频制作
# 图片合成视频
import cv2
# 1 获取图片维度信息
img = cv2.imread('image1.jpg')
imgInfo = img.shape
# 分别表示行(高度) 列(宽度)
size = (imgInfo[1], imgInfo[0])
print('size: ', size)
# 2 创建视频写入对象
# 视频写入对象 参数: 编码器: cv2.VideoWriter_fourcc(*'XVID') 帧率:25 文件大小: size
videoWriter = cv2.VideoWriter('new1.mp4', cv2.VideoWriter_fourcc(*'XVID'), 25, size)
# 3 将读入的图片写入视频
for i in range(1, 31):
# 读入图片
img = cv2.imread('image' + str(i) + '.jpg')
# 视频写入
videoWriter.write(img)
# 4 释放videoWriter结束视频制作
videoWriter.release()
print('end!')
图片维度信息如下:
image.png
创建的视频信息如下,其中维度与上述读入原始图片的维度一致:
image.png