Я пытаюсь преобразовать данные MNIST в формат png в соответствии с форматом данных, указанным в http://yann.lecun.com/exdb/mnist/
Ниже приведен формат ФАЙЛА ИЗОБРАЖЕНИЯ ТРЕНИРОВОЧНОГО КОМПЛЕКТА (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