将Numpy图片数组转换为1px高版本

时间:2019-04-09 16:47:47

标签: python numpy python-imaging-library

上下文:

Google有一个MNIST数据的电子表格。他们拍摄了(28, 28, 1)张图像,并将其转换为(1, 784, 1)行数据(784为28 * 28)。然后,他们对所有65k图像执行此操作。因此,它适合像这样的漂亮的Spritesheet: https://storage.googleapis.com/learnjs-data/model-builder/mnist_images.png

我正在寻找自己的数据精灵。

我正在使用numpy / PIL,因此当我将图像转换为具有3个通道的numpy时。

问题: 我该如何将其展平,然后将其合并为平面图像,使其变成宽度为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 个答案:

答案 0 :(得分:1)

如果您要问的是如何将多个图像连接成一个图像,其中每一行代表原始数据集中的单个图像,那么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])

答案 1 :(得分:1)

您不太需要Users UserId1 name: userx age: 100 UserId2 name: usery age: 120 来执行此操作,尽管我不知道是否需要使用它,但是有一种使用简单Python的方法:

numpy

示例

源图像:

enter image description here

目标图片:

enter image description here