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

该博客展示了如何使用Python的PIL库和struct模块从MNIST数据集中读取并显示10张图片及其对应的标签。通过解包字节数据,创建新的灰度图片,并进行像素值的设置。最后,程序读取并打印了标签值,并展示每张图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值