将标签和图片调整成我们想要的size大小

1.采用的数据集是VOC2007

将标签和图片调整成我们想要的size大小

其中SegmentationClass是label图片,JPEGImages是原图

label:将标签和图片调整成我们想要的size大小

 image:

将标签和图片调整成我们想要的size大小

 2. 定义一个utils.py文件,在这个文件中写一个keep_image_size_open函数:

from PIL import Image

def keep_image_size_open(path,size=(256,256)):
    #把图片大小固定为256*256,这个你可以自己改

    #把图片读进来
    img=Image.open(path)

    #图片有长边和短边,把长边的长度读出来
    temp=max(img.size)

    #整一个掩码出来,这个掩码size大小是图片的最长边*最长边
    #(0,0,0)表示掩码这张rgb图像是全黑的
    mask=Image.new("RGB",(temp,temp),(0,0,0))
    #将原图粘上来:(0,0)表示粘到左上角
    mask.paste(img,(0,0))
    #现在原图已经粘到mask上面了,此时对它进行resize,缩放到你想要的,传入的那个size
    mask=mask.resize(size)

    return mask

 3.标签图片和原图中什么大小都有,把它们都调整成统一格式大小的图片,这里是统一调整为256*256(你也可以自己改成(258*258))

transform=transforms.Compose([transforms.ToTensor()])

#我们自己定义的类MyDataset继承了Dataset
class  MyDataset(Dataset):
    def __init__(self,path):
        #path是一直到Voc2007的,这个目录下有三个文件夹:ImageSets,JPEGImages,SegmentationClass
        self.path=path

        # self.name是一个列表,里面存放的是path/SegmentationClass这个目录下所有标签图片的名字
        #比如2007_000032.png,2007_000033.png
        self.name=os.listdir(os.path.join(path,'SegmentationClass'))

    #self.name是一个列表,里面存放的是标签图片的名字,返回有多少张标签图片
    def __len__(self):
        return len(self.name)

    def __getitem__(self,index):
    #这个函数会随机生成一个索引index(但不会重复)

         #label(调整为我们需要size大小的标签图片),label_name(标签图片的名字,比如1.jpg),label_path(标签图片的完整,比如D:\1.jpg)
         #image,image_name,image_path

         #label_name比如说等于:2007_000032.png
         label_name=self.name[index]

         #刚才只是拿到了标签图片的名字,现在拼接成完整的标签图片的路径
         label_path=os.path.join(self.path,'SegmentationClass',label_name)

         #有了标签图片的路径,那么原图的路径就很简单(因为原图和标签图片一样,都叫2007_000032,只不过一个叫png,一个叫jpg
         image_path=os.path.join(self.path,"JPEGImages",label_name.replace("png","jpg"))

         #这些图片大小其实是不一样大的,然而我们网络其实是需要固定大小的图片
         #将原图和标签都送进keep_image_size_open函数里面进行resize
         label= keep_image_size_open(label_path)
         image= keep_image_size_open(image_path)

         #image图片和label图片做归一化
         return transform(image),transform(label)

if __name__=="__main__":
    data=MyDataset("E:\桌面\VOCdevkit\VOC2007")
    print(data[0][0].shape)
    #输出得到:torch.Size([3, 256, 256])
    #这说明我们确实将图片大小调整到我们所需要的大小了

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年6月13日
下一篇 2022年6月13日

相关推荐