【图片操作】提取GIF的图片帧

简介: gif是我们日常生活中常用的一种图片,它介于视频和图片之间。我们可以用图片的内存体验到一些视频的感觉。但是有时候我们会想把gif的图片全部提取出来,今天我们就来实现一下这个操作。

一、前言

gif是我们日常生活中常用的一种图片,它介于视频和图片之间。我们可以用图片的内存体验到一些视频的感觉。但是有时候我们会想把gif的图片全部提取出来,今天我们就来实现一下这个操作。

二、 OpenCV简单使用

OpenCV库包含很多东西,主要就是计算机视觉和机器学习方面的作用。其中对图像、视频的操作是OpenCV的强项。比起Pillow模块,OpenCV要更加专业,下面我们就来具体看看吧。

1、模块安装

模块安装只需要执行下面的语句即可:

pip install opencv-python
复制代码

安装完成后我们就可以通过下面的的方式导入模块:

import cv2 as cv
复制代码

然后我们可以通过cv.来调用OpenCV中的函数。

2、基本操作

这里我们来看看OpenCV读取图片、视频的操作:

import cv2 as cv
img = cv.imread("test.jpg")
cv.imshow(img, "img")
cv.waitKey()
cv.destroyAllWindows()
复制代码

上面就是读取图片并显示的操作,其中imread用来读取图片、imshow用来显示图片。而:

cv.waitKey()
cv.destroyAllWindows()
复制代码

是显示图片的常规操作。下面看看读取视频的操作:

import cv2 as cv
# 读取视频
video = cv.VideoCapture("test.mp4")
# 读取一帧视频
ret, frame = video.read()
复制代码

上面读取视频的操作,同时我们可以用上面的操作读取GIF。然后我们可以调用read方法实现对视频或GIF帧的读取。 这里的read方法会返回两个参数,第一个是是否有下一帧,第二个则是图片帧。

3、读取GIF的帧

这里我们来读取GIF中的所有帧:

import cv2 as cv
gif = cv.VideoCapture("test.gif")
flag = True
while flag:
    ret, frame = gif.read()
    if not ret:
        flag = False
复制代码

通过上面的代码,我们就可以读取GIF中所有帧。

三、提取GIF的图片帧

这里我们一帧帧读取图片,然后再将图片保存下来:

import os
import cv2 as cv
frame_path = "frames"
# 创建目录
if not os.path.exists(frame_path)
    os.mkdir(frame_path)
gif = cv.VideoCapture("test.gif")
flag = True
video_name = 1000
while flag:
    # 读取图片帧
    ret, frame = gif.read()
    # 保存图片帧
    cv.imwrite(str(video_name) + ".jpg", frame)
    video_name += 1
    if not ret:
        flag = False
复制代码

上面我们就我们实现了提取GIF的图片帧的操作。


目录
相关文章
|
传感器 数据采集 运维
常见的中断源类型详解
【4月更文挑战第4天】常见的中断源类型详解
1625 3
|
编解码 自然语言处理
重磅!阿里巴巴开源最大参数规模大模型——高达720亿参数规模的Qwen-72B发布!还有一个的18亿参数的Qwen-1.8B
阿里巴巴开源了720亿参数规模的Qwen-72B大语言模型,是目前国内最大参数规模的开源模型。该模型在3万亿tokens数据上训练,支持多种语言和代码、数学等数据。Qwen-72B模型具有出色的评估效果,在数学逻辑和意图理解等方面超过了其他开源模型,并且支持多语言扩展。此外,阿里巴巴还开源了18亿参数规模的Qwen-1.8B模型,虽然规模较小但效果不错。Qwen-72B模型已对学术和个人完全开放,商用情况下月活低于100万可直接商用。有兴趣的用户可以通过相关链接获取模型地址和资源信息。
QString格式化的几种用法:补零/进制转换/保留小数位等
QString格式化的几种用法:补零/进制转换/保留小数位等
3660 0
|
iOS开发 MacOS
Mac用户无权限修改/usr/bin目录
对于Mac OS X 10.11 El Capitan用户,由于系统启用了SIP(System Integrity Protection), 导致root用户也没有权限修改/usr/bin目录。
3129 0
|
9月前
|
数据采集 机器学习/深度学习 编解码
小红书 hi lab开源最强多模态大模型dots.vlm1,性能对标闭源 Gemini 2.5 Pro 和 Seed-VL1.5
小红书 hi lab开源最强多模态大模型dots.vlm1,性能对标闭源 Gemini 2.5 Pro 和 Seed-VL1.5
845 0
小红书 hi lab开源最强多模态大模型dots.vlm1,性能对标闭源 Gemini 2.5 Pro 和 Seed-VL1.5
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
1858 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
人工智能 文字识别 自然语言处理
文档图像多模态大模型最新技术探索
文档图像多模态大模型最新技术探索
1197 0
|
存储 机器学习/深度学习
MustDrop:多阶段去除冗余视觉token,提升多模态大模型推理效率
本文提出了一种高效的多模态大模型,多阶段去除冗余视觉token——MustDrop。多模态大模型中的视觉tokens通常表现出显著的空间和时间冗余,并且大模型的大部分输入令牌是视觉tokens,这极大程度上影响了多模态大模型推理效率。
842 11
|
存储 IDE API
最佳实践:通过 FastAPI APIRouter 提升开发效率
FastAPI 是一个现代的、高性能的 Python Web 框架,它提供了 APIRouter 来帮助组织和管理路由。APIRouter 是一个可用于组织和分组路由的类,使得代码结构更加清晰和可维护。本文将介绍 FastAPI APIRouter 的用法,包括实践案例以及在 IDE 编辑器中的运行步骤。
|
人工智能 编解码 文字识别
视觉理解模型Qwen2.5-VL开源,斩获多榜单冠军!
视觉理解模型Qwen2.5-VL开源,斩获多榜单冠军!
1293 0