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中下划线的使用方法
Mar 27 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 Python
深入理解Python爬虫代理池服务
Feb 28 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
python全栈知识点总结
Jul 01 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
django和flask哪个值得研究学习
Jul 31 Python
Python常用断言函数实例汇总
Nov 30 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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 冒泡排序算法的实现代码
2010/08/08 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
python格式化字符串实例总结
2014/09/28 Python
python中引用与复制用法实例分析
2015/06/04 Python
Python 实现链表实例代码
2017/04/07 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python单元测试简单示例
2018/07/03 Python
Python列表list排列组合操作示例
2018/12/18 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
财务个人年度总结范文
2015/02/26 职场文书
《确定位置》教学反思
2016/02/18 职场文书
思想品德课教学反思
2016/02/24 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server
Golang ort 中的sortInts 方法
2022/04/24 Golang