查看MNIST数据集中的图片

介绍

MNIST是一个手写数字的数据集,对里面的数据进行了分类处理,将每一张图片放到自己对应的文件夹下。这里只使用了训练集,要看测试集的可以自行查看。

下载mnist数据集

通过pytorch下载数据集,保存在当前目录下的root文件夹下。

import torchvision


dataset = torchvision.datasets.MNIST("./root", train=True,
                                     transform=torchvision.transforms.ToTensor(), download=True)

转换数据类型

下载下来的数据维度是:torch.Size([1, 28, 28]),然后读取出来一个数据,将其转换成np类型的格式。

first = dataset[0][0]
a = np.array(first)
print(type(a))

a就是np类型的了,准确的说是<class 'numpy.ndarray'>。

加载图片

def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

img_show(a)

一张图片就显示出来了。

整体代码如下:

import torchvision.datasets.mnist as mnist
from PIL import Image

def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

data = mnist.read_image_file("./root/MNIST/raw/train-images-idx3-ubyte")
print(data.shape)

img = data[0]

a = np.array(img)
print(type(a))
img_show(a)

注:也可以用transform进行转换

在取到数据后,用transform转换成PIL格式的数据,也可以进行显示。

我在进行拼接图片的时候,显示的图片是拉伸过的,可能是转换用的reshape函数不对。

下面是全部转换的代码

import numpy as np
import torch
import torchvision
from PIL import Image
from torch.utils.data import DataLoader
import os

dataset = torchvision.datasets.MNIST("./root",train=True,transform=torchvision.transforms.ToTensor(),
                                     download=True)
loader = DataLoader(dataset,batch_size=1,shuffle=False,drop_last=False)

piltrans = torchvision.transforms.ToPILImage()

def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

# 建立文件夹
def mkdir():
    num = 10
    for i in range(num):
        dir = "./root/MNIST/img/{}".format(num)
        if not os.path.exists(dir):
            os.makedirs(dir)
mkdir()

list = [1 for i in range(10)]

for img,label in loader:
    # print(img)
    num = int(label[0])
    print(num)
    print(type(img),img.shape)
    print(type(label),label.shape)
    img = torch.reshape(img,(1,28,28))
    image = piltrans(img)
    # image.show()

    dir = "./root/MNIST/img/{}".format(num)
    if not os.path.exists(dir):
        os.mkdir(dir)

    Image.Image.save(image,dir+r"/"+str(list[num])+r".jpg")
    list[num] += 1

我在第一次运行的时候,不知道为什么建立了一个名为10的文件夹,还报错了,而且其余数字有的没有建立,第二次运行就没问题了,文件夹全部建立成功。

下面是运行成功的图片

 下面是百度网盘的链接:

有用者自取:

链接:https://pan.baidu.com/s/12gnmfnSzUDKgUc7Z-IwxSg?pwd=1234 
提取码:1234

注:阿里云盘不能分享压缩包,没办法的啦!

注:里面只有图片,什么都没有

代码全程手撸,虽然也不知道转成图片有什么用吧,但是我就想看看图片。

希望大家一键三连,一起学习,一起进步。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值