2015-11-15 224 views
1

我有要存儲到圖像中的數據。我創建了寬度爲100和高度爲28的圖像,我的矩陣具有相同的形狀。當我使用Image.fromarray(matrix)形狀的變化:Image.fromarray更改大小

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

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