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读取mp3中ID3信息的方法
Mar 05 Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 Python
python实现SMTP邮件发送功能
Jun 16 Python
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
Tornado高并发处理方法实例代码
Jan 15 Python
Python常用的json标准库
Feb 19 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 Python
Python中全局变量和局部变量的理解与区别
Feb 07 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 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
墨西哥网上超市:Superama
2018/07/10 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
幼儿园家长会邀请函
2014/01/15 职场文书
上课玩手机检讨书
2014/02/08 职场文书
《称象》教学反思
2014/04/25 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
市场部经理岗位职责
2015/02/02 职场文书
求职信格式范文
2015/03/19 职场文书
毕业论文致谢范文
2015/05/14 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js