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 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
Python pickle模块用法实例分析
May 27 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
python基础教程项目五之虚拟茶话会
Apr 02 Python
python是否适合网页编程详解
Oct 04 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
基于tensorflow权重文件的解读
May 26 Python
PyMongo 查询数据的实现
Jun 28 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/12/23 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现类之间的方法互相调用
2018/04/29 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
微型企业创业投资计划书
2014/01/10 职场文书
作文评语集锦大全
2014/04/23 职场文书
经典演讲稿汇总
2014/05/19 职场文书
经营目标管理责任书
2014/07/25 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
工厂标语大全
2014/10/06 职场文书
招标保密承诺书
2015/01/20 职场文书
服务员岗位职责范本
2015/04/09 职场文书
党员发展大会主持词
2015/07/03 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python