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 相关文章推荐
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
Python实现图片拼接的代码
Jul 02 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 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 mysql数据库操作分页类
2008/06/04 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
vue实现信息管理系统
2020/05/30 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python实现爬取逐浪小说的方法
2015/07/07 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
Django 使用logging打印日志的实例
2018/04/28 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
经典大学生求职信范文
2014/01/06 职场文书
阿德的梦教学反思
2014/02/06 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
森林病虫害防治方案
2014/06/02 职场文书
门店业绩提升方案
2014/06/08 职场文书
督导岗位职责
2015/02/04 职场文书
美术教师求职信范文
2015/03/20 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
利用python进行数据加载
2021/06/20 Python
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技