【问题标题】:Read a still-image gif into python without using PIL?在不使用 PIL 的情况下将静止图像 gif 读入 python?
【发布时间】:2017-02-10 09:07:19
【问题描述】:

我正在编写一个解构图像的脚本,其中一个关键组件是使脚本尽可能轻量级。所以我尝试使用尽可能少的导入:

import sys, os, re ,fnmatch
import numpy as np
import cv2
import matplotlib.pyplot as plt

就是这样。问题是,我正在测试的其中一张图片是 GIF:

OpenCV 不支持,尽管搜索了一段时间,但我似乎找不到在纯 python 中读取 GIF(或将它们转换为 png)的方法。

我能找到的每个解决方案都使用 Pillow 或 PIL,这两者都非常大,而且实际上,甚至 OpenCV 也在推动它。 GIF 是静止图像。这里有简单的解决方案吗?

【问题讨论】:

  • Pillow/PIL 是最流行的图像模块 - 所以它更容易解决。
  • 那不是吗?
  • 您可以尝试自己编写加载程序。我在 C++ 中的 gif 解码器略小于 50 KB 的源代码。看看这个:How to find where does Image Block start in GIF images? 在 3MF 链接中你会找到你需要的所有信息
  • 我不知道该怎么做。为什么我不能直接使用 PIL 的做法?
  • @Rich 如果您不知道如何编码,那么您只能使用第 3 方库。您可以使用任何东西,但正如您所提到的,您需要一些轻量级的东西,我向您提供了 GIF 需要多少源代码的信息(包括编码器/解码器)。我不知道有任何轻量级的 GIF 加载器,而且我接触到的那些对于我的口味来说太麻烦了。 (即使现在浏览器也存在 GIF 问题,例如没有变通方法的动画不会在其中循环播放)

标签: python python-2.7 opencv image-processing gif


【解决方案1】:

对你来说可能有点晚了,但现在有一个名为 gif2numpy 的库,它可以将 gif 图像转换为 numpy 图像,以便你可以将它们与 opencv、matplotlib、scipy 等一起使用。它不依赖于 PIL 或枕头,而仅依赖于 opencv-python、numpy 和 kaitaistruct。 它是这样的:

from __future__ import print_function
import gif2numpy
import cv2

images = "Images/audrey.gif", "Images/hopper.gif", "Images/testcolors.gif"
for image in images:
    np_images, extensions, image_specs = gif2numpy.convert(image)
    print("type of image:", image, type(np_images[0]))
    cv2.imshow("np_image", np_images[0])
    cv2.waitKey()
    cv2.destroyWindow("np_image")

安装它

pip install gif2numpy

或者直接从github上获取https://github.com/bunkahle/gif2numpy

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 2013-11-07
    • 2014-10-07
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多