利用PIL加载图片
——运用在Dataset中
from torch.utils.data import Dataset
from PIL import Iamge
import os # os用于处理系统的路径的
class MyData(Dataset):
def __init__(self,root_dir,label_dir):
self.root_dir = root_dir # 把输入的形参赋值给self之后就变成了类的属性
self.label_dir = label_dir
self.path = os.path.join(root_dir,label_dir)
self.img_path = os.listdir(self.path)
# 通过listdir之后,可以让self.path文件夹变成一个列表,可以对其中的内容进行检索
def __getitem__(self,idx):
img_name = self.img_path[idx]
img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
# 获取到具体的str地址
img = Image.open(img_item_path)
label = self.label_dir
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)
对应的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