Python将视频或者动态图gif逐帧保存为图片的方法

 更新时间:2019年09月10日 09:37:22   作者:小宇少侠  
本文是基于opencv将视频和动态图gif保存为图像帧的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧

本文是基于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实现多任务进程示例

    大家好,本篇文章主要讲的是Python实现多任务进程示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Python之字典对象的几种创建方法

    Python之字典对象的几种创建方法

    这篇文章主要介绍了Python之字典对象的几种创建方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python 实现将list转成字符串,中间用空格隔开

    python 实现将list转成字符串,中间用空格隔开

    今天小编就为大家分享一篇python 实现将list转成字符串,中间用空格隔开,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python异常处理总结

    Python异常处理总结

    这篇文章主要介绍了Python异常处理总结,需要的朋友可以参考下
    2014-08-08
  • Python asyncio的一个坑

    Python asyncio的一个坑

    这篇文章主要介绍了Python asyncio的一个坑,文章从Python编程错误开始介绍,改变与好多变不成中常犯的错误,我们今天就来分析分析吧,需要的下伙伴也可以参考一下
    2021-12-12
  • Python Pygame实战之欢乐打地鼠游戏

    Python Pygame实战之欢乐打地鼠游戏

    打地鼠是一款比较经典的敏捷类游戏,我们可以在许多商场门口看到这类游戏机,在电脑和手机上也有许多类似的游戏。本文将用Python中的Pygame库实现这一游戏,需要的可以参考一下
    2022-02-02
  • Python SQL查询并生成json文件操作示例

    Python SQL查询并生成json文件操作示例

    这篇文章主要介绍了Python SQL查询并生成json文件操作,涉及Python基于mssqlhelper模块进行mysql数据库查询与json格式文件生成相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • python web框架Flask实现图形验证码及验证码的动态刷新实例

    python web框架Flask实现图形验证码及验证码的动态刷新实例

    在本篇文章里小编给大家整理的是关于python web框架Flask实现图形验证码的相关知识点,有需要的朋友们参考下。
    2019-10-10
  • 人生苦短我用python python如何快速入门?

    人生苦短我用python python如何快速入门?

    这篇文章主要教大家如何快速入门python,一个简短而全面的入门教程带你走入Python的大门,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python中xml格式的转换方法

    python中xml格式的转换方法

    这篇文章主要为大家详细介绍了python中xml格式的转换方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论