【问题标题】:convert PIL.GifImagePlugin.GifImageFile to 3 dimension numpy array将 PIL.GifImagePlugin.GifImageFile 转换为 3 维 numpy 数组
【发布时间】:2021-09-18 06:49:23
【问题描述】:

我有一个不同网址的列表。当你点击这个 url 时,上面可能有一张图片或一个 gif。我的任务是将 gif 和图片转换为 3d numpy 数组。如果我们谈论 gif,那么这个 gif 上的第一张图片就足够了。我写了这段代码:

import numpy as np
from PIL import Image

my_url = 'https://......'
im = Image.open(requests.get(my_url, stream=True).raw)
np_im = np.asarray(im)
print(np_im.shape)

问题是,当我在 my_url 中有图片链接时,np_im 是 3 维(r g 和 b 的图片大小为 3 *)。如果我这样做print(type(im)) 我会得到PIL.PngImagePlugin.PngImageFile 但是当我的链接上有 gif 时,np_im 只有二维(只有长度和宽度,没有 r g 和 b)。如果我这样做print(type(im)),我会得到PIL.GifImagePlugin.GifImageFile。如何获得 gif 的 3 维 np 数组?当我打印 im 来控制台时,它仍然像一张图片,所以仍然应该有 r g 和 b 的解释

【问题讨论】:

    标签: python image numpy python-imaging-library gif


    【解决方案1】:

    我想我找到了很长的路要走。首先,我们将 gif 转换为 4d numpy 数组

    frames = np.array([np.array(frame.copy().convert('RGB').getdata(),dtype=np.uint8).reshape(frame.size[1],frame.size[0],3) for frame in ImageSequence.Iterator(im)])
    

    然后我们拍摄我们的 gif 的第一张照片

    np_im = frames[0]
    

    在这种情况下,np_im 是 3d numpy 数组,其形状为 (length, width, 3)

    【讨论】:

      猜你喜欢
      • 2014-11-02
      • 1970-01-01
      • 2020-02-17
      • 2017-03-09
      • 2023-02-03
      • 2012-09-16
      • 2018-11-30
      • 2015-08-18
      • 1970-01-01
      相关资源
      最近更新 更多