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检测手机QQ在线状态的脚本代码
Feb 10 Python
Python Trie树实现字典排序
Mar 28 Python
Python中用memcached来减少数据库查询次数的教程
Apr 07 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
神经网络理论基础及Python实现详解
Dec 15 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
python实现简单加密解密机制
Mar 19 Python
Python实现微信机器人的方法
Sep 06 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
Python标准库pathlib操作目录和文件
Nov 20 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传输数据的代码
2007/11/13 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
python+django加载静态网页模板解析
2017/12/12 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
python里 super类的工作原理详解
2019/06/19 Python
优秀企业获奖感言
2014/02/01 职场文书
校园十大歌手策划书
2014/02/01 职场文书
小学运动会前导词
2015/07/20 职场文书
2015年科普工作总结
2015/07/23 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
入党心得体会
2019/06/20 职场文书
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android