为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2022-01-05 10:51:15
语境:谷歌有一个 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 imageimage_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 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

你并不完全需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.


查看完整回答
反对 回复 2022-01-05
?
慕容3067478

TA贡献1773条经验 获得超3个赞

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


查看完整回答
反对 回复 2022-01-05
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信