Pytorch的Dataloader加载图片并显示[自学笔记]

这篇博客介绍如何使用PyTorch构建一个数据类,加载和显示语义分割数据集。数据集包含两个子文件夹:SegmentationClass存储mask.png,JPEGImages存储.jpg图片。通过定义转化函数保持图片尺寸,并使用Dataset和DataLoader加载数据。示例代码展示了如何读取和显示数据加载器中的一组图片和其对应的mask。

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

(自学笔记,都是抄的,长期更新)

  利用pytorch写一个数据类,可以加载数据图片并显示。在datasets文件夹下有两个子文件夹,分别是SegmentationClass用以存放语义分割数据的mask.png,JPEGImages用以存放语义分割的数据图片.jpg。

在这里插入图片描述

import os
import torch
from torchvision import transforms
from torch.utils.data import Dataset,DataLoader
from  PIL import  Image

# 将图片转换为tensor
transform=transforms.Compose([
    transforms.ToTensor()
])
# 将tensor转化为图片
show_tensor_pic=transforms.ToPILImage()

#保持图片最长的边进行缩放,默认缩放到(256,256)
def keep_png_size(path,size=(256,256)):
    img=Image.open(path)
    temp=max(img.size)
    mask=Image.new('P',(temp,temp))
    mask.paste(img,(0,0))
    mask=mask.resize(size)
    return mask
#保持图片最长的边进行缩放,默认缩放到(26,256)
def keep_jpg_size(path,size=(256,256)):
    img=Image.open(path)
    temp=max(img.size)
    mask=Image.new('RGB',(temp,temp))
    mask.paste(img,(0,0))
    mask=mask.resize(size)
    return mask


class MyDataset(Dataset):
    def __init__(self,path):
        self.path=path#输入图片路径
        #保存所有mask的名字
        self.name=os.listdir(os.path.join(path,'SegmentationClass'))

    def __len__(self):
        return len(self.name)

    def __getitem__(self, item):
        # 根据索引获取一张mask的名字
        segment_name=self.name[item]

        # 获取这张mask的路径
        segment_path=os.path.join(self.path,'SegmentationClass',segment_name)
        # 根据mask的名字取索引图片的名字
        image_path=os.path.join(self.path,'JPEGImages',segment_name.replace('png','jpg'))

        # 将mask压缩到一定的尺寸
        segment_image=keep_png_size(segment_path)
        # 将图片压缩到一定的尺寸
        image=keep_jpg_size(image_path)

        return transform(image),transform(segment_image)

if __name__ == '__main__':
	#建立一个dataloader,2个图片为一组,随机打乱
    data_loader=DataLoader(MyDataset('datasets'),batch_size=2,shuffle=True)
	#读取一组图片和标签
    img, seg=next(iter(data_loader))
	#显示该组的第一张图片和标签
    show_tensor_pic(img[0]).show()
    show_tensor_pic(seg[0]).show()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值