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实现调用其他python脚本的方法
Oct 05 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
Python实现查看系统启动项功能示例
May 10 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Python元组常见操作示例
Feb 19 Python
python实现邮件发送功能
Aug 10 Python
详解python中*号的用法
Oct 21 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
基于Python的OCR实现示例
Apr 03 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
PHP多个版本的分析解释
2011/07/21 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
简单实现python爬虫功能
2015/12/31 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
python 实现生成均匀分布的点
2019/12/05 Python
python_mask_array的用法
2020/02/18 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
客服工作职责
2013/12/11 职场文书
总经理职责
2013/12/22 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
党性观念心得体会
2014/09/03 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers