对视频进行抽帧操作,将视频逐帧转换为图片(.jpg格式的图片的文件)
此处采取的方法是:对视频.MP4文件每隔10帧截取一张.jpg格式的图片
需要使用的Python方法cv2在opencv-python库中,下载安装方式;
pip install opencv-python
实现上述功能的Python代码如下:
import cv2
# TODO 将原视频转换为图片
def VideotoPicture():
# 视频地址 创建一个VideoCapture对象,指定读取的视频文件
cap = cv2.VideoCapture(r'C:\Users\12292\Desktop\1.mp4')
# 通过摄像头的方式
# cap = cv2.VideoCapture(1)
fps = cap.get(cv2.CAP_PROP_FPS) # 获取帧率 每一秒的视频帧数
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取高度
# 判断视频是否读取成功 成功返回True 失败返回False
sucess = cap.isOpened()
frame_count = 0
# 视频得到的图片名字img_name
img_name = 0
while sucess:
frame_count += 1
# 读取视频每一帧图像
sucess, frame = cap.read()
# TODO 每隔10帧存储一张图片
if (frame_count % 10 == 0):
img_name += 1
# 图片存储地址以及存储格式.jpg frame就是视频转换得到的图片 视频得到的图片名字img_name从1开始
# 即最终视频转换得到的图片名字依次为1.jpg,2.jpg,3.jpg.................
cv2.imwrite(r'C:\Users\12292\Desktop\1\%d.jpg' % img_name, frame)
print("帧率(每秒视频的帧数):", fps)
# 释放视频资源
cap.release
if __name__ == '__main__':
VideotoPicture() # 视频转图像
基本步骤如下:
a. 使用glob获取路径下的所有图片;
b. cv2.imread()读取所有图片;
c. 将读取的图片存储在新的列表中,img_array;
d. 使用cv2.VideoWriter()创建VideoWriter对象,注意参数的设置;
e. 使用cv2.VideoWriter().write()保存 img_array 中的每一帧图像到视频文件;
f. 释放 VideoWriter对象;
对众多图片进行拼接合成操作,将多张图片拼接成一个视频文件(例如.MP4格式)
实现上述功能的Python代码如下:
import cv2
import numpy as np
import glob
import os
# 其它格式的图片也可以 此处使用的是.jpg格式的图片
img_array = []
# 指出用于生成视频的图片所在的存储路径 glob获取路径下的所有图片
for filename in glob.glob('C:/Users/12292/Desktop/1/*.jpg'):
# 读取所有图片
img = cv2.imread(filename)
height, width, layers = img.shape
# 获取图片大小尺寸
size = (width, height)
# 将读取的图片存储在新的列表中,img_array
img_array.append(img)
# avi:视频类型,或者导出.mp4类型的视频文件也可以
# cv2.VideoWriter_fourcc(*'mp4v'):编码格式
# 5:视频帧率
# size:视频中图片大小
# 视频输出地址与命名:C:/Users/12292/Desktop/2/2.mp4
# 使用cv2.VideoWriter()创建VideoWriter对象
out = cv2.VideoWriter('C:/Users/12292/Desktop/2/2.mp4',
# cv2.VideoWriter_fourcc(*'DIVX'),
cv2.VideoWriter_fourcc(*'mp4v'),
5, size)
for i in range(len(img_array)):
# 使用cv2.VideoWriter().write()保存 img_array 中的每一帧图像到视频文件;
out.write(img_array[i])
# 释放 VideoWriter对象
out.release()