Image.fromarray改变大小

时间:2015-11-15 21:24:58

标签: python python-imaging-library

我有想要存储到图像中的数据。我创建了一个宽度为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开头的部分。

为什么尺寸会发生变化?

1 个答案:

答案 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