因为初学tensorflow,最先接触的肯定是MNIST手写数据集。但数据集的格式并不一致,有的是npz格式,有些直接保存为图片格式。这篇文章的目的主要是将npz文件生成对应的图片格式,并且保存在对应的文件夹下。共有四个文件,其中(60000, 28, 28)为训练数据集的大小,(60000,)为训练标签集的大小。
首先尝试了tensorflow方法,其中img_after_decoder
为正常图片解码之后成为的矩阵。但由于MNIST数据集的图片都为灰度图片,只是28×28的二维图片,而tf.gfile.GFile
方法要求的是彩色三维图像。所以需要改变方法
# 图像编码
encode_image = tf.image.encode_jpeg(img_after_decoder)
# 保存文本到本地文件
with tf.gfile.GFile("seaha.jpg", 'wb') as f:
f.write(encode_image.eval())
一幅灰度图像就是一个数据矩阵,矩阵的值表示灰度的浓淡。其每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位(uint8)的非线性尺度来保存,这样可以有256级灰度(如果用16(uint16)位,则有65536级)
原文链接:https://blog.csdn.net/luoshiyong123/article/details/87546900
然后尝试了scipy.misc.imsave
方法,但是报错AttributeError: module 'scipy.misc' has no attribute 'imsave'
所以最终采用的是imageio.imsave
方法,实际代码如下:
import numpy as np
import imageio
import os
cat_data = np.load('mnist.npz')
print(cat_data.files)
x_train=cat_data["x_train"]
y_train=cat_data["y_train"]
x_test=cat_data["x_test"]
y_test=cat_data["y_test"]
for i in range(0,100):
if os.path.isdir('D://MNIST/%s' %str(y_test[i])): ##不用加引号,如果是多级目录,只判断最后一级目录是否存在
print('dir exists')
imageio.imsave('D://MNIST/%s/%s.jpg' % (str(y_test[i]), str(i)), x_test[i,])
pass
else:
print('dir not exists')
os.mkdir('D://MNIST/%s' %str(y_test[i]))
print('D://MNIST/%s/%s.jpg' %(str(y_test[i]),str(i)))
imageio.imsave('D://MNIST/%s/%s.jpg' %(str(y_test[i]),str(i)), x_test[i,])