gpt4 book ai didi

python - Image.fromarray 改变大小

转载 作者:行者123 更新时间:2023-11-30 23:04:25 31 4
gpt4 key购买 nike

我有想要存储到图像中的数据。我创建了一个宽度为 100、高度为 28 的图像,我的矩阵具有相同的形状。当我使用 Image.fromarray(matrix) 时,形状发生变化:

from PIL import Image

img = Image.new('L', (100, 28))
tmp = Image.fromarray(matrix)
print(matrix.shape) # (100, 28)
print(tmp.size) # (28, 100)
img.paste(tmp, (0, 0, 100, 28) # ValueError: images do not match

当我使用 img.paste(tmp, (0, 0)) 时,对象会粘贴到图像中,但以 x 值 28 开头的部分丢失。

为什么尺寸会改变?

最佳答案

PIL 和 numpy 有不同的索引系统。 matrix[a, b] 为您提供 x 位置 b 和 y 位置 a 处的点,但 img.getpixel((a, b)) 为您提供位于x 位置a,y 位置b。因此,当您在 numpy 和 PIL 矩阵之间进行转换时,它们会切换维度。要解决此问题,您可以对矩阵进行转置 (matrix.transpose())。

这是发生的事情:

import numpy as np
from PIL import Image

img = Image.new('L', (100, 28))
img.putpixel((5, 3), 17)

matrix = np.array(img)

print matrix[5, 3] #This returns 0

print matrix[3, 5] #This returns 17

matrix = matrix.transpose()
print matrix[5, 3] #This returns 17

print matrix[3, 5] #This returns 0

关于python - Image.fromarray 改变大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725237/

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