MINST数据集转换为png图片

MINST数据集转换为png图片

最近在学习machine learning,希望可以出一些自己的内容,首先是相当于hello world的minst数据集处理。

MINST数据集如下:http://yann.lecun.com/exdb/mnist/

它的格式不是通用格式,需要自行调整,如下

#下面是需要导入的库
import numpy as np
import struct
from PIL import Image


def decode_idx3_ubyte(idx3_ubyte_file,saveFlag,status):

#此函数用来解析idx3文件,idx3_ubyte_filec指定图像文件路径

    #读取二进制数据
    bin_data=open(idx3_ubyte_file,'rb').read()

    #解析文件头信息,依次为魔数、图片数量、每张图片高、每张图片宽
    offest=0
    fmt_header='>iiii'
    magic_number,num_images,num_rows,num_cols=struct.unpack_from(fmt_header,bin_data,offest)
    print('魔数:%d,图片数量:%d,图片大小:%d%d' % (magic_number,num_images,num_rows,num_cols))

    #解析数据集
    image_size=num_rows*num_cols
    offest += struct.calcsize(fmt_header)
    fmt_image='>'+str(image_size)+'B'
    images=np.empty((num_images,num_rows,num_cols))
    for i in range(num_images):
        if (i+1)%10000==0:
            print('已解析%d'%(i+1)+'张')
        images[i]=np.array(struct.unpack_from(fmt_image,bin_data,offest)).reshape((num_rows,num_cols))

        #保存图像
        if saveFlag == True:
        	im = Image.fromarray(np.uint8(images[i]))
        	im.save('E:/Qinyp/My python/practice/'+ status + str(i) + '.png')
        offest += struct.calcsize(fmt_image)
    return images

'''images是一个三维数组,images[i][a][b]表示第i张图片的倒数第a行,b列的像素'''


def decode_idx1_ubyte(idx1_ubyte_file):

#解析idx1文件函数,idx1_ubyte_file指定标签文件路径
    
    #读取二进制数据
    bin_data=open(idx1_ubyte_file,'rb').read()
    
    #解析文件头信息,依次为魔数和标签数
    offest=0
    fmt_header='>ii'
    magic_number,num_images=struct.unpack_from(fmt_header,bin_data,offest)
    print('魔数:%d,图片数量:%d张' %(magic_number,num_images))
    
    #解析数据集
    offest+=struct.calcsize(fmt_header)
    fmt_image='>B'
    labels=np.empty(num_images)
    for i in range(num_images):
        if (i+1)%10000==0:
            print('已解析:%d'%(i+1)+'张')
        labels[i]=struct.unpack_from(fmt_image,bin_data,offest)[0]
        offest+=struct.calcsize(fmt_image)
        print(labels[0])
    return labels

'''labels是一个一维数组,每个元素都一一对应images[i]'''

#调用函数,显示结果
decode_idx3_ubyte('E:/Qinyp/My python/practice/train-images.idx3-ubyte',1,'pic')
decode_idx1_ubyte('E:/Qinyp/My python/practice/train-labels.idx1-ubyte')

运行结果如下:

魔数:2051,图片数量:60000,图片大小:2828
已解析10000张
已解析20000张
已解析30000张
已解析40000张
已解析50000张
已解析60000张
魔数:2049,图片数量:60000张

生成的部分图片如下:
在这里插入图片描述

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值