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 zip文件 压缩
Dec 24 Python
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
Python 绘图和可视化详细介绍
Feb 11 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
利用python计算时间差(返回天数)
Sep 07 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
解决pytorch 保存模型遇到的问题
Mar 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
E路文章系统PHP
2006/12/11 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
原生JS实现天气预报
2020/06/16 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Python count函数使用方法实例解析
2020/03/23 Python
python中for in的用法详解
2020/04/17 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
医学护理系毕业生求职信
2013/10/01 职场文书
音乐系毕业生自荐信
2013/10/27 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
现场施工员岗位职责
2015/04/11 职场文书