gpt4 book ai didi

python - 为什么有些图像有第三维,而其他图像有 4?

转载 作者:行者123 更新时间:2023-12-04 12:08:08 30 4
gpt4 key购买 nike

我对图像处理的了解不多。我正在尝试实现一个 ConvNet。我下载了一些图像作为数据集并使它们的高度和宽度相等。然后我尝试通过以下代码将它们加载到 np.array 中:

train_list = glob.glob('A:\Code\Machine 
Learning\CNN\ConvolutionalNN1\TrainImg\*.jpg')
X_train_orig = np.array([np.array(Image.open(file)) for file in train_list])

但它给了我无法广播 (420,310) 到 (420,310,3) 的错误。然后我打印了数组的形状,有些是 (420,310,3) 其他 (410,320,4)。为什么会这样?我怎样才能改变它以适应数组?

最佳答案

问题

所以基本上这里发生的事情是您正在使用三种不同格式的图像(至少那些出现在您的问题中)。他们分别是:

  • RGB (维度的(420, 310, 3) ), 三 channel
  • RGB-A (维度的(420, 310, 4) ), 四 channel
  • Grayscale (维度的(420, 310) ), 单 channel

  • 您看到的第三个维度表示图像中的 channel 数(前两个分别是高度和宽度)。

    一个例子将进一步澄清它。我从互联网上下载了随机图像,每个图像都属于上述三种格式之一。

    RGB 图像 dog.png
    enter image description here

    RGB-A 图像 fish.png
    enter image description here

    灰度图像 lena.png
    enter image description here

    这是一个 python 脚本,用于使用 PIL 加载它们中的每一个。并显示它们的形状:
    from PIL import Image
    import numpy as np

    dog = Image.open('dog.png')
    print('Dog shape is ' + str(np.array(dog).shape))

    fish = Image.open('fish.png')
    print('Fish shape is ' + str(np.array(fish).shape))

    lena = Image.open('lena.png')
    print('Lena shape is ' + str(np.array(lena).shape))

    这是输出:
    Dog shape is (250, 250, 3)
    Fish shape is (501, 393, 4)
    Lena shape is (512, 512)

    因此,当您尝试将所有图像以迭代方式分配给数组 ( np.array ) 时,您会遇到形状不匹配错误。

    解决方案

    解决此问题的最简单方法是将所有图像转换为一种特定格式,然后再将其保存到数组中。假设您将使用预训练的 ImageNet 模型,我们会将它们转换为 RGB格式(您也可以类似地选择您选择的格式)。

    我们将转换 RGB-ARGB使用以下代码:
    fish = Image.open('fish.png')
    print('Fish RGB-A shape is ' + str(np.array(fish).shape))
    rgb = fish.convert('RGB')
    print('Fish RGB shape is ' + str(np.array(rgb).shape))

    输出是:
    Fish RGB-A shape is (501, 393, 4)
    Fish RGB shape is (501, 393, 3)

    同样,您可以对所有图像执行此操作,然后您的所有图像都有一致数量的 channel (在本例中为三个)。

    注意 :在我的示例中,图像的空间维度也有所不同。在您的情况下,这不是问题,因为所有尺寸都是一致的 (420, 310) .

    希望这能澄清您的疑问。

    关于python - 为什么有些图像有第三维,而其他图像有 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51923503/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com