代码文件
# coding:utf-8
import os
import cv2
# 视频存放路径
source_video_path = os.getcwd() + '/v.mp4'
# 图片存放路径
save_base_path = os.getcwd() + '/pic'
# 视频转换为图片的存放路径
save_pics_path = save_base_path + '/cache_pic'
# 确保存储图片的文件夹存在
if not os.path.exists(save_pics_path):
os.makedirs(save_pics_path)
# 将视频转换为图片并进行计数,返回总共生成了多少张图片
def video_to_pics(video_cap):
num = 0
# 逐帧读取视频
while True:
ret, frame = video_cap.read()
# 检查是否成功读取了帧
if not ret:
break
# 构造图片的保存路径
save_path = os.path.join(save_pics_path, f'frame{num}.jpg')
# 保存图片
cv2.imwrite(save_path, frame)
num += 1
return num
if __name__ == '__main__':
video_cap = cv2.VideoCapture(source_video_path)
print('读取完毕')
print('开始将视频转换为图片')
number = video_to_pics(video_cap)
print('转换图片数目=', number)
print('转换完毕')
video_cap.release()
题目描述
任务描述
本关任务:认识并掌握 cv2 的用法。完成任务:使用 cv2
把视频转换成图片(视频路径已给定)。
相关知识
为了完成本关任务,你需要掌握:
- 读入图像;
- 显示图像;
- 保存图像;
- 视频功能。
读入图像
函数 cv2.imread(filepath,flags)
读入一副图片:
-
filepath:要读入图片的完整路径;
-
flags:读入图片的标志:
cv2.IMREAD_COLOR
:默认参数,读入一副彩色图片,忽略 alpha 通道;cv2.IMREAD_GRAYSCALE
:读入灰度图片;cv2.IMREAD_UNCHANGED
:读入完整图片,包括 alpha 通道。
显示图像
函数 cv2.imshow(wname,img)
显示图像:
-
wname:显示图像的窗口的名字;
-
img:要显示的图像(
imread
读入的图像),窗口大小自动调整为图片大小。
保存图像
函数 cv2.imwrite(file,img,num)
保存一个图像:
- file:要保存的文件名;
- img:要保存的图像;
- num:可选参数,它针对特定的格式:对于 JPEG,其表示的是图像的质量,用 0-100 的整数表示,默认 95;对于 png ,第三个参数表示的是压缩级别。默认为 3。
注意:
cv2.IMWRITE_JPEG_QUALITY
类型为long
,必须转换成int
;cv2.IMWRITE_PNG_COMPRESSION
, 从 0 到 9 压缩级别越高图像越小。
视频功能
视频中最常用的就是从视频设备采集图片或者视频,或者读取视频文件并从中采样。所以比较重要的也是两个模块,一个是 VideoCapture
,用于获取相机设备并捕获图像和视频,或是从文件中捕获。还有一个 VideoWriter
,用于生成视频。
函数 cap.read() (cap=cv2.VideoCapture())
按帧读取视频,ret,frame 是获 cap.read()
方法的两个返回值。
-
ret 是布尔值,如果读取帧是正确的则返回 True,如果文件读取到结尾,它的返回值就为 False;
-
frame 就是每一帧的图像,是个三维矩阵。
编程要求
根据提示,在右侧编辑器 Begin - End 之间补充代码。
测试说明
测试步骤说明:
-
先在代码文件中补充代码;
-
自行测试后点击评测按钮对比结果,系统会判定是否通关;
-
测试通过可在图形化界面的目录 workspace/myshixin/pic/cache_pic 中看到转换成功的图片。
开始你的任务吧,祝你成功!