將Mnist手寫數字庫轉化為圖片形式 和標簽形式


Mnist 數據文件有兩種,一種是圖片文件,一種是標簽文件,那么如何把他們解析出來呢?

1)解析圖片文件

  可以看出在train-images.idx3-ubyte中,第一個數為32位的整數(魔數,圖片類型的數),第二個數為32位的整數(圖片的個數),第三和第四個也是32為的整數(分別代表圖片的行數和列數),接下來的都是一個字節的無符號數(即像素,值域為0~255),因此,我們只需要依次獲取魔數和圖片的個數,然后獲取圖片的長和寬,最后逐個像素讀取就可以了。

(2)解析標簽文件

  

  可以發現,與上面的非常相似,只不過這里每一個字節變成了標簽而已(標簽大小為0~9)
  如何使用python解析數據呢? 首先需要安裝python的圖形處理庫PIL,這個庫支持像素級別的圖像處理,對於學習數字圖像處理有很大的幫助。安裝完成之后,就可以進行圖像的解析了。看一下代碼:

from PIL import Image
import struct


def read_image(filename):
    f = open(filename,'rb')
    index = 0
    buf = f.read()
    f.close()
    magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)
    index += struct.calcsize('>IIII')

    for i in range(images):
        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('E:/Mnist/' + str(i) + '.png')


def read_label(filename, saveFilename):
    f = open(filename, 'rb')
    index = 0
    buf = f.read()
    f.close()
    magic, labels = struct.unpack_from('>II' , buf , index)
    index += struct.calcsize('>II')
    labelArr = [0] * labels
    for x in range(labels):
        labelArr[x] = int(struct.unpack_from('>B', buf, index)[0])
        index += struct.calcsize('>B')
        save = open(saveFilename, 'w')
        save.write(','.join(map(lambda x: str(x), labelArr)))
        save.write('\n')
        save.close()
        print('save labels success')


if __name__ == '__main__':
     read_image('E:/Python/t10k-images.idx3-ubyte')
    read_label('E:/Python/t10k-labels.idx1-ubyte', 'E:/Mnist_Label/label.txt')

程序的具體流程為:

  首先打開文件,然后分別讀取魔數,圖片個數,以及行數和列數,在struct中,可以看到,使用了’>IIII’,這是什么意思呢?意思就是使用大端規則,讀取四個整形數(Integer),如果要讀取一個字節,則可以用’>B’(當然,這里用沒用大端規則都是一樣的,因此只有兩個或兩個以上的字節才有用)。

   什么是大端規則呢?不懂的可以百度一下,這個不再贅述(http://baike.baidu.com/link?url=Bgg8b0vRr3b_SeGyOl8U4DmAbIQT9swGuNtD_21ctEI_NliqsQ-mKF73YT90EILF2EQy50mEua_M4z6Cma3rmK)

引自博客:

原文:https://blog.csdn.net/u014046170/article/details/47445919

最后效果:

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM