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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
python实现从字典中删除元素的方法
May 04 Python
python中list常用操作实例详解
Jun 03 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
python Django框架实现自定义表单提交
Mar 25 Python
用Pygal绘制直方图代码示例
Dec 07 Python
tensorflow实现简单的卷积网络
May 24 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
基于python操作ES实例详解
Nov 16 Python
python使用PIL剪切和拼接图片
Mar 23 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 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动态生成VRML网页
2006/10/09 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
JS location几个方法小姐
2008/07/09 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
SVM基本概念及Python实现代码
2017/12/27 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
小学语文国培感言
2014/03/04 职场文书
个人买房协议书范本
2014/10/06 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书