小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、前言
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的图片帧的操作。