(Python3下)获取MNIST手写数据集的图片

数据集下下来应该是这样的:

我们把它们全部解压出来,得到4个没有后缀名的文件,t10k是测试集,train是训练集,image保存图像数据,label保存标签。我们要提取图片只需要用到images就好了,用sublime等打开是这样的:

 images文件的第一行是文件的相关信息,00000803是魔数,用于识别文件,相当于id,00002710是长度,16进制转换为10进制等于10000,正好是测试集中的数据量,两个0000001c分别指示图像像素有28行28列。这些不用管太多。

分行和空格是sublime自动显示的,文件内部实际上是连续的一串数字,读取的时候不要弄错了。

紧跟在后面的是图像数据了,每个字节保存一个像素的灰度(MNIST是只有灰度的),0~255。

知道这些后,我们只需要读取其中的数据并保存为.jpg格式就好了。

文件中直接读取出来得到的对象是形如b'\x00\xff'的二进制对象,这里使用struct模块将其转化为十进制整数。

保存文件使用了opencv-python。

下面是代码:

import cv2 as cv
import struct
import numpy as np

num = 10000
f = open('train-images.idx3-ubyte','rb')
image = np.zeros((28,28))
f.read(16)

for picNum in range(num):
    path = str(picNum)+'.jpg'
    for x in range(28):
        for y in range(28):
            image[x][y] = struct.unpack('B',f.read(1))[0]
    cv.imwrite(path,image)

f.close()

改改num的值和两个路径就能用了。运行之前一定要记得确认路径,几万张图片乱塞删起来还是稍微有点麻烦的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值