【发布时间】:2018-02-01 20:00:48
【问题描述】:
我正在尝试根据http://yann.lecun.com/exdb/mnist/中所说的数据格式将MNIST数据转换为png格式
下面是训练集图像文件的格式(train-images-idx3-ubyte):
[offset] [type] [value] [description]
0000 32 bit integer 0x00000803(2051) magic number
0004 32 bit integer 60000 number of images
0008 32 bit integer 28 number of rows
0012 32 bit integer 28 number of columns
这是我的代码。我使用 struct 解包数据集并尝试打印数据集中的前 4 个 32 位整数。
from PIL import Image
import struct
def read_image(filename):
f = open(filename, 'rb')
index = 0
buf = f.read()
magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)
index += struct.calcsize('>IIII')
print(magic, images, rows, columns)
f.close()
# for i in range(images):
# #for i in xrange(2000):
# image = Image.new('L', (columns, rows))
# for x in range(rows):
# for y in range(columns):
# image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0]))
# index += struct.calcsize('>B')
# print('save ' + str(i) + 'image')
# image.save('test/' + str(i) + '.png')
if __name__ == '__main__':
read_image('train-images-idx3-ubyte.gz')
但是输出完全错误:
529205256 2055376946 226418 1634299437
【问题讨论】: