2016-08-15 69 views
1

我的問題是有關一個Kaggle data science competition。我試圖從包含1位灰度像素信息(0到255)的一維數組中讀取圖像28x28圖像。所以陣列從0到783其中每個像素被編碼爲x = i * 28 + j。如何將一維圖像陣列PIL圖像轉換在Python

換算成二維矩陣28x28此:

000 001 002 003 ... 026 027 
028 029 030 031 ... 054 055 
056 057 058 059 ... 082 083 
| | | | ... | | 
728 729 730 731 ... 754 755 
756 757 758 759 ... 782 783 

對於圖像操作的原因(調整大小,傾斜)我想讀取陣列成同存儲器PIL圖像。我對Matplotlib image function做了一些研究,我認爲這是最有希望的。另一個想法是Numpy image functions

我在找什麼,是一個代碼示例,告訴我如何通過Numpy或Matplotlib或其他任何方式加載該一維數組。或者如何使用例如Numpy.vstack將該數組轉換爲二維圖像,然後將其作爲圖像讀取。

+1

簡單使用'np.reshape()'與'(28,28)'與它的希望的形狀? – Divakar

+0

以及如何使用它來加載圖像?碼? – Matthias

+0

是的,我不確定閱讀圖片部分。 – Divakar

回答

2

可以將NumPy的數組轉換爲使用Image.fromarray PIL圖像:

import numpy as np 
from PIL import Image 

arr = np.random.randint(255, size=(28*28)) 
img = Image.fromarray(arr.reshape(28,28), 'L') 

L模式指示數組值代表亮度。結果將是一個灰度圖像。

+0

剛剛發現[此酮](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits)也一樣,這是用於[Kaggle教程]( https://www.kaggle.com/wiki/EnteringSubmission)。 – Matthias