我有想要存储到图像中的数据。我创建了一个宽度为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开头的部分。
为什么尺寸会发生变化?
答案 0 :(得分:2)
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