7 Dataset类代码实战

用途:可以用于添加数据集做数据增强

一、代码实现流程

  1. 从Dataset类中输入图片,并获取label
    image

  2. 下载opencv,读取图片

image

  1. 利用IMG读图
from PIL import Image
  • 获取图片的路径:

image

  • 获取单张图片

控制台验证:

图片路径:在windows中需要转义字符\\

from PIL import Image
img_path="E:\\python项目\\pytorch_tudui\\dataset\\train\\ants\\0013035.jpg"
img=Image.open(img_path)
img.show()

image

  • 获得所有图片

控制台测试

import os
dir_path="dataset/train/ants"
img_path_list=os.listdir(dir_path)
img_path_list[0]

image

  • 设置路径
import os
root_dir="dataset/train"
label_dir="ants"
path=os.path.join(root_dir,label_dir)

image

  • 获取对应路径的数据集

在控制台先运行类,在执行下面的命令:
image

  • 数据集拼接

image

获取数据和标签:
image

  • 另外一种:标签单独标记的数据集

image

二、完整代码及函数分析

实现数据中图片和标签的获取,并且将数据集拼接,并进行对应图片输出。

点击查看代码
from torch.utils.data import Dataset #从工具箱中取数据类
#import cv2 #本项目中先不采用opencv来读图
from PIL import Image #通过IMG获得图片
import os #获取系统地址

class MyData(Dataset):
    def __init__(self,root_dir,label_dir):#root_dir:根目录,label_dir:因为子目录是标记目录
        self.root_dir=root_dir
        self.label_dir=label_dir
        self.path=os.path.join(self.root_dir,self.label_dir) #地址拼接
        self.img_path=os.listdir(self.path) #获取对应地址的图片

    def __getitem__(self, idx):#通过索引获得图片及label
        img_name=self.img_path[idx] #图片名称
        img_item_path=os.path.join(self.root_dir,self.label_dir,img_name) #图片地址
        img=Image.open(img_item_path) #获取图片
        label=self.label_dir #获取图片label
        return img,label

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

if __name__ == '__main__':
    root_dir="dataset/train"
    ants_label_dir="ants"
    bees_label_dir = "bees"
    ants_dataset=MyData(root_dir,ants_label_dir) #获取ants数据集
    bees_dataset = MyData(root_dir, bees_label_dir)

    #整个训练集:用于扩充数据集使用
    train_dataset=ants_dataset+bees_dataset

    #获取图片展示图片
    img,label=train_dataset[20]
    img.show()

posted @ 2022-05-09 23:46  Trouvaille_fighting  阅读(130)  评论(0)    收藏  举报