您的位置:首页 > 其它

PIL image模块处理图片,struct从mnist文件集读取十张图片并分别显示标签和图片

2017-12-21 17:16 447 查看
from PIL import image

图片摄取像素值:im=image.putpixel(int(struct.pack('>I,byte))

显示图片im.show()

图片大小:im.size()

图片旋转:im.rotate(45)#逆时针旋转 45 度角 使用struct读取字节文件:

import struct

struct.unpack('>I',bytes)#从字节串bytes解析一个为I(unsighed char,python int)

struct.pack('>II',12,13)#将12,13解析为字节串

struct.unpack_from('>II',buf,index)#从buf字节流解析两个int型,起始位置index

-----------------------------------------------------------------------------------------------------------

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from PIL import Image

import struct

def read_image(filename):

#读取图片十张,并将其放在list中

    f = open(filename, 'rb')

    index = 0

    buf = f.read()

    f.close()

    magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)#返回magic,图片数,行数,列数

    #print(magic, images, rows, columns)

    index += struct.calcsize('>IIII')#下移图片集读取位置

    imagelist=[]

    for i in range(10):

        image = Image.new('L', (columns, rows))

        for x in range(rows):

            for y in range(columns):

                #print(struct.unpack_from('>B', buf, index))

                #print(repr(struct.unpack_from('>B', buf, index)))

                image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0]))#向图片(y,x)位置存放像素值

                index += struct.calcsize('>B')

        #print ('save ' + str(i) + 'image')

        #image.save('E:\\study\\dataset\\t10k-labels-idx1-ubyte\\test' + str(i) + '.png')

        imagelist.append(image)

    return imagelist

def read_label(filename, saveFilename):

#读取label十个并将其放在一个list中返回

    f = open(filename, 'rb')

    index = 0

    buf = f.read()

    f.close()

    magic, labels = struct.unpack_from('>II' , buf , index)#标签数据集的头部为magic和labels(标签数)

    index += struct.calcsize('>II')#下移字节集读取位置

    labelArr = [0] * labels

    #labelArr = [0] * 2000

    for x in range(10):

        labelArr[x] = int(struct.unpack_from('>B', buf, index)[0])

        index += struct.calcsize('>B')

    return labelArr

if __name__ == '__main__':

    il=read_image('E:\\study\\dataset\\t10k-images-idx3-ubyte\\t10k-images.idx3-ubyte')

    la=read_label('E:\\study\\dataset\\t10k-labels-idx1-ubyte\\t10k-labels.idx1-ubyte', 'E:\\study\\dataset\\t10k-labels-idx1-ubyte\\test\\label.txt')

    for i in range(len(la):#使用循环显示标签值和图片

        print('the',la[i],':')

        il[i].show()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: