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

2,107 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、前言

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的图片帧的操作。