2016-08-15 3 views
1

Мой вопрос связан с Kaggle data science competition. Я пытаюсь прочитать изображение из одномерного массива, содержащего 1-bit grayscale Информация о пикселях (от 0 до 255) для 28x28 image. Таким образом, массив находится от от 0 до 783, где каждый пиксель кодируется как x = i * 28 + j.как преобразовать 1-мерный массив изображений в изображение PIL в Python

переоборудован в двухмерную матрицу 28х28 это:

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.

Что я искал, является примером кода, который показывает мне, как загрузить этот 1-мерный массив через Numpy или Matplotlib или что-нибудь еще. Или как преобразовать этот массив в двумерное изображение, используя, например, Numpy.vstack, а затем прочитать его как изображение.

+1

Прост использования 'np.reshape()' с желаемой формой '(28,28)' с ним? – Divakar

+0

и как его использовать для загрузки изображения? код? – Matthias

+0

Да, я не уверен в чтении части изображения. – Divakar

ответ

2

Вы можете преобразовать массив NumPy в PIL изображение с помощью Image.fromarray:

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 tutorial] (https://www.kaggle.com/wiki/EnteringSubmission). – Matthias