一、前言
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的图片帧的操作。