我正在尝试根据http://yann.lecun.com/exdb/mnist/中所述的数据格式将MNIST数据转换为png格式
以下是TRAINING SET IMAGE FILE的格式(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
答案 0 :(得分:0)
我意识到我忘记提取“train-images-idx3-ubyte.gz”。提取后,我得到了一个名为“train-images.idx3-ubyte”的文件,取而代之的是“train-images-idx3-ubyte” .gz“使用这个新文件名,最后它起作用了。