Python将视频或者动态图gif逐帧保存为图片的方法


Posted in Python onSeptember 10, 2019

本文是基于opencv将视频和动态图gif保存为图像帧。可以根据输入视频格式的不同,修改第21行。

       对动图的处理不同于视频,PIL库包含对图像序列的基本支持。当打开gif图像时,自动加载第一帧。当图像读取完成时,抛出EOFError异常。我们可以使用seek()与tell()函数完成图像帧的读取。

       本代码的前部分是对文件的读取。数据集文件结构如下:

|——datasets
  |——action1
   action1_1.gif
   action1_2.gif
   ......
  |——action2
   action2_1.gif
   action2_2.gif
   ......
import cv2
import os
from PIL import Image
video_path = 'PATH_ROOT/datasets/' #视频或gif图像的路径
save_path = 'PATH_ROOT/save/' #保存帧的路径
action_list = os.listdir(video_path)
for action in action_list:
 if not os.path.exists(save_path+action):
  os.mkdir(save_path+action)
 video_list = os.listdir(video_path+action)
 for video in video_list:
  prefix = video.split('.')[0]
  if not os.path.exists(save_path+action+'/'+prefix):
   os.mkdir(save_path+action+'/'+prefix)
  save_name = save_path + action + '/' + prefix + '/'
  video_name = video_path+action+'/'+video
  name = video_name.split('.')[1]
  if name == "avi":
   cap = cv2.VideoCapture(video_name)
   fps = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
   fps_count = 0
   for i in range(fps):
    ret, frame = cap.read()
    if ret:
     cv2.imwrite(save_name + str(10000 + fps_count) + '.jpg', frame)
     fps_count += 1
  if name == "gif":
   im = Image.open(video_name)
   #当打开一个序列文件时,PIL库自动加载第一帧。
   #可以使用seek()函数和tell()函数在不同帧之间移动。实现保存
   try:
    while True:
     current = im.tell()
     #为了保存为jpg格式,需要转化。否则可以保存为png
     img = im.convert('RGB') 
     img.save(save_name+'/'+str(10000+current)+'.jpg')
     im.seek(current + 1)
   except EOFError:
    pass

知识点扩展:python如何将gif动态图转化成每帧图片

from PIL import Image
import os
gifFileName = 'test.gif'
#使用Image模块的open()方法打开gif动态图像时,默认是第一帧
im = Image.open(gifFileName)
pngDir = gifFileName[:-4]
#创建存放每帧图片的文件夹
os.mkdir(pngDir)
try:
 while True:
  #保存当前帧图片
  current = im.tell()
  im.save(pngDir+'/'+str(current)+'.png')
  #获取下一帧图片
  im.seek(current+1)
except EOFError:
  pass

总结

以上所述是小编给大家介绍的Python将视频或者动态图gif逐帧保存为图片的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
跟老齐学Python之正规地说一句话
Sep 28 Python
Python argv用法详解
Jan 08 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
python模块之re正则表达式详解
Feb 03 Python
用python找出那些被“标记”的照片
Apr 20 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
python二维键值数组生成转json的例子
Dec 06 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 #Python
Python字符串中添加、插入特定字符的方法
Sep 10 #Python
详解python uiautomator2 watcher的使用方法
Sep 09 #Python
一行Python代码制作动态二维码的实现
Sep 09 #Python
python制作英语翻译小工具代码实例
Sep 09 #Python
Python pandas.DataFrame 找出有空值的行
Sep 09 #Python
Python制作词云图代码实例
Sep 09 #Python
You might like
教你如何使用php session
2013/10/28 PHP
php获取域名的google收录示例
2014/03/24 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
webpack 样式加载的实现原理
2018/06/12 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
python实现彩票系统
2020/06/28 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
Python地图绘制实操详解
2019/03/04 Python
python使用KNN算法识别手写数字
2019/04/25 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
红旗方阵解说词
2014/02/12 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
户籍证明书标准模板
2014/09/10 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
七一表彰大会简报
2015/07/20 职场文书
2016大学军训心得体会
2016/01/11 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android