def batch_resize_png_images(input_folder, output_folder, new_size):
    for filename in os.listdir(input_folder):
        if filename.endswith(".png"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)

            # 打开输入的PNG图像
            img = Image.open(input_path)

            # 调整大小
            resized_img = img.resize(new_size, Image.ANTIALIAS)

            # 保存调整大小后的图像
            resized_img.save(output_path)

            print(f"图像 {filename} 调整大小成功!")
    


if __name__ == "__main__":
    input_path = "/home/ouyang/milu_Unet/result/"  # 输入PNG图像的路径
    output_path = "/home/ouyang/milu_Unet/result_originalSize"  # 输出调整大小后的PNG图像的路径
    new_size = (2560, 1440)  # 新的大小,格式为 (宽度, 高度)

    batch_resize_png_images(input_path, output_path, new_size)

1.采用的数据集是VOC2007

ImageSpan大小获取_图像处理

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

label:

ImageSpan大小获取_图像处理_02

 image:

ImageSpan大小获取_图像处理_03

 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])
    #这说明我们确实将图片大小调整到我们所需要的大小了