目录
🚀1.技术介绍
视频是由大量的帧组成的。其中,每一帧都是一幅图像。所谓视频分解,就是把组成视频的每一帧从视频文件中分解出来。本案例将使用OpenCV分解一个视频文件,把分解得到的视频帧保存在如图所示的images文件夹下。
在保存视频帧之前,要先命名将要被保存的视频帧。关键代码如下所示:
frame_name = 1 # 使用数字命名将要被保存的帧
具备了这个标签后,再来编写“将这些视频帧保存在images文件夹下”的代码。需要注意的是,在拼接保存视频帧路径之前,要先把frame_name由整数转为字符串。关键代码如下所示:
cv2.imwrite("images/" + str(frame_name) + ".jpg", frame) # 保存视频帧
🚀2.实现代码
本案例的操作对象是视频文件。首先,使用VideoCapture类的构造方法打开视频文件。然后,读取视频帧。接着,把读取到的视频帧保存在images文件夹下。最后,释放被视频文件占用的空间。
具体的实现代码如下所示:
import cv2
video = cv2.VideoCapture(r"C:\Users\Lenovo\Desktop\room.mp4") # 打开视频文件
frame_name = 1 # 使用数字命名将要被保存的帧
while (video.isOpened()): # 视频文件被打开后
retval, frame = video.read() # 读取视频帧
if retval == True: # 读取到视频帧后
cv2.imwrite("data/images/" + str(frame_name) + ".jpg", frame) # 保存视频帧
else: # 没有读取到视频帧
break # 终止循环
frame_name = frame_name + 1 # 用于命名将要被保存的帧的数字执行自加操作
cv2.waitKey(1) # 1毫秒后播放视频文件的下一帧
print("视频已分解完成!") # 控制台输出提示信息
video.release() # 释放被视频文件占用的空间
运行结果如下所示: