我最近疑惑為什么使用transforms.resize(image_size)后跟著transforms.CenterCrop(image_size), 代碼實現(xiàn)看下
1.新建文件夾 image_folder 放張圖片進(jìn)去
2.定義DataSet
class Cudata(Dataset):
def __init__(self):
super(Cudata, self).__init__()
self.data_dir = r'./image_folder/'
self.datalist = os.listdir(self.data_dir)
self.cu_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Resize(120),
transforms.CenterCrop(120),
])
def __getitem__(self, index):
id = self.datalist[index]
img_path = os.path.join(self.data_dir, id)
img = Image.open(img_path)
img = self.cu_transform(img)
return img
def __len__(self):
return len(self.datalist)
3.調(diào)用
cu_data = Cudata()
for idx, x in enumerate(cu_data):
print(x.shape)
save_image(x, './image_folder/out_{}.jpeg'.format(idx))
圖片原圖大小是
torch.Size([3, 1104, 736])
執(zhí)行 transforms.Resize(120)后圖片大小為
torch.Size([3, 180, 120])
執(zhí)行transforms.CenterCrop(120)后圖片大小為
torch.Size([3, 120, 120])
所以執(zhí)行代碼后會得到一個不怎么會拉伸變形又包含大部分圖像信息的正方形圖片
transforms.Compose([
transforms.ToTensor(),
transforms.Resize(120),
transforms.CenterCrop(120),
])