Конвертировать массив изображений Numpy в версию 1px - PullRequest
1 голос
/ 09 апреля 2019

КОНТЕКСТ:

У Google есть таблица данных MNIST.Они взяли (28, 28, 1) изображение и превратили его в (1, 784, 1) строку данных (784 - 28 * 28).Затем они сделали это для всех изображений 65k.Так что он вписывается в красивую таблицу спрайтов, например: https://storage.googleapis.com/learnjs-data/model-builder/mnist_images.png

Я собираюсь создать свою собственную таблицу данных.

Я использую numpy / PIL, поэтому, когда я получаю изображение, преобразованное в numpy, с 3 каналами.

Вопрос: Как мне просто сгладить его, а затем объединить это плоское изображение, чтобы оно превратилось в изображение с шириной = 784, высотой = числом изображений, все в RGB.

здесь псевдокод:

# Load image image
image_data = image.load_img("/path/to.png", target_size=(28, 28))

# Create shape (28, 28, 3)
np_train = np.array(image_data)

# Goal change (28, 28, 3) into (1, 784, 3)
# then add that to some final_image, building to final_image (num_images, 784, 3)

# then 
img = Image.fromarray(final_image)
img=.show # spritesheet of image data for consumption

РЕДАКТИРОВАТЬ: Результат: https://github.com/GantMan/rps_tfjs_demo/blob/master/spritemaker/makerps.py

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вам не нужно numpy, чтобы сделать это, хотя я не знаю, нужно ли это использовать, но есть способ сделать это с простым Python:

from PIL import Image

src_image = Image.open('test_image.png') # Image of size (28,28)

pixels = list(src_image.getdata()) # Get all pixel in 1D array.

dst_image = Image.new('RGB', (1,src_image.size[0] * src_image.size[1])) # Create new image with new size.

dst_image.putdata(pixels) # Place pixels in the new image.

dst_image.save('result.png') # Save the new image.

Пример :

Исходное изображение:

enter image description here

Изображение назначения:

enter image description here

1 голос
/ 09 апреля 2019

Если вы задаетесь вопросом, как объединить несколько изображений в одно, где каждая строка представляет отдельное изображение из исходного набора данных, то Reshape + Concatenate должна сделать свое дело:

# all_images is a list / iterator of 28x28x3 numpy arrays 
final_image = np.concatenate([img.reshape(1, -1, 3) for img in all_images])
...