猿问

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

语境:


谷歌有一个 MNIST 数据的 spritesheet。他们拍了一张(28, 28, 1)图片,把它变成了(1, 784, 1)一行数据(784就是28*28)。然后他们对所有 65k 图像执行此操作。所以它适合像这样一个漂亮的 spritesheet: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


繁华开满天机
浏览 152回答 2
2回答

qq_花开花谢_0

你并不完全需numpy要这样做,虽然我不知道是否有必要使用它,但有一种方法可以用简单的 Python 做到这一点:from PIL import Imagesrc_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.

慕容3067478

如果您的问题是如何将多个图像连接成一个,其中每一行代表原始数据集中的一个图像,那么 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])
随时随地看视频慕课网APP

相关分类

Python
我要回答