许多人在使用mnist数据集时都是直接调用,那么如果想将mnist数据集保存在本机中该怎么做呢
首先我们要知道mnist数据集中的数据时什么样的
如下所示,为训练集中的第一张图片的部分数据,其为一维数组,共有784个数(这个矩阵表达的数好像是3)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4VEVNFTTE1kMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzEzM4AjM0IjMzETNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
然后需要将此一维数组转换为二维矩阵,但时如果就直接进行转换或是转换成二维数组之后也不对数据进行改变的话,保存为图片之后是无法肉眼进行识别的。所以我们要将所有大于0的数改成255.这样就能够肉眼识别了。
如下图
将二维数组改变之后就可以使用opencv进行存储了。
代码如下
from tensorflow.examples.tutorials.mnist import input_data
import cv2 as cv
import numpy
from PIL import Image
import os
#引入mnist数据集
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
#建立保存路径
save_dir = "MNIST_data/save"
if os.path.exists(save_dir) is False:
os.mkdir(save_dir)
#循环写入图片
for i in range(1):
new_image = mnist.train.images[i,:]
#print(new_image)
#将所有大于0的数更改为255
for i in range(len(new_image)):
if new_image[i] > 0:
new_image[i] =255
print(new_image)
#new_image = numpy.array(new_image)
#更改维度
new_image = new_image.reshape(28,28)
print(new_image.shape)
filename = save_dir + 'mnist_train_%d.jpg' % i
#使用pillow写入图片
Image.fromarray((new_image*255).astype('uint8'),mode='L').save(filename)
#使用opencv写入图片
cv.imwrite("2.jpg",new_image)
img = cv.imread("2.jpg")
最终的显示结果如下: