利用PIL加载图片
——运用在Dataset中

  1. from torch.utils.data import Dataset
  2. from PIL import Iamge
  3. import os # os用于处理系统的路径的
  4. class MyData(Dataset):
  5. def __init__(self,root_dir,label_dir):
  6. self.root_dir = root_dir # 把输入的形参赋值给self之后就变成了类的属性
  7. self.label_dir = label_dir
  8. self.path = os.path.join(root_dir,label_dir)
  9. self.img_path = os.listdir(self.path)
  10. # 通过listdir之后,可以让self.path文件夹变成一个列表,可以对其中的内容进行检索
  11. def __getitem__(self,idx):
  12. img_name = self.img_path[idx]
  13. img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
  14. # 获取到具体的str地址
  15. img = Image.open(img_item_path)
  16. label = self.label_dir
  17. return img,label
from PIL import Image
img_path = 'hymenoptera_data/train/ants/0013035.jpg'
img = Image.open(img_path)
img.size
Out[5]: (768, 512)
img.show()
dir_path = "hymenoptera_data/train/ants"
import os
img_path_list = os.listdir(dir_path)
img_path_list[0]
Out[10]: '0013035.jpg'
img_name = img_path_list[0]
img_item_path = os.path.join(dir_path,img_name)
img_item_path
Out[14]: 'hymenoptera_data/train/ants\\0013035.jpg'
img = Image.open(img_item_path)

image.png
image.png
对应的Img类


getitem()

我们使用了getitem()之后,我们就可以对类实现引用,

    def __getitem__(self, idx):
        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
        return img,label

这里我们重写了getitem()类

当我们对MyData使用[]索引的时候,就会调用getitem()类,

getitem()返回的结果,就是我们得到的输出。

这里我们返回的是,img和label

ants_dataset = MyData(root_dir,ants_label_dir)
ants_dataset[0]
Out[7]: 
(<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x279B5A9BE80>,
 'ants')
ants_0 = ants_dataset[0]
ants_dataset[1]
Out[9]: 
(<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x333 at 0x279D2390940>,
 'ants')

这里
ants_dataset[1]的输出是
(,
‘ants’)

这里用括号括起来,说明是一个元组,里面有两个元素,

‘ants’

正好对应了getitem()的两个返回值img,label