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创建和删除目录的方法
Apr 29 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
Python 中Pickle库的使用详解
Feb 24 Python
python基础教程项目四之新闻聚合
Apr 02 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
Django框架自定义session处理操作示例
May 27 Python
Python argparse模块应用实例解析
Nov 15 Python
Python json读写方式和字典相互转化
Apr 18 Python
python speech模块的使用方法
Sep 09 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 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
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
新浪的图片新闻效果
2007/01/13 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
详解AngularJS控制器的使用
2016/03/09 Javascript
javascript中this指向详解
2016/04/23 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
Python开发的HTTP库requests详解
2017/08/29 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python  logging日志打印过程解析
2019/10/22 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
化学相关工作求职信
2013/10/02 职场文书
员工培训邀请函
2014/01/11 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
求职简历自我评价2015
2015/03/10 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
高中生军训感言
2015/08/01 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL
SQLServer常见数学函数梳理总结
2022/08/05 MySQL