实现效果
注意:我将剪裁后的图像也保存的png
格式,原因可参考:深度学习中图像格式选用jpg还是png?答:png
import os
from PIL import Image, ImageOps
if __name__ == '__main__':
orig_dir = r'E:\A_new_dataset\cutorig_tunnel\2_dan\images'
mask_dir = r'E:\A_new_dataset\cutorig_tunnel\2_dan\masks'
save_dir = r'E:\A_new_dataset\cutorig_tunnel\2_dan\save'
# -------------------------------设置存放文件夹-------------------------------- #
if not os.path.exists(save_dir):
os.makedirs(save_dir)
save_len = len(os.listdir(save_dir)) + 1
images_savedir = os.path.join(save_dir, f'save_{save_len}', 'images')
mask_savedir = os.path.join(save_dir, f'save_{save_len}', 'mask')
if not os.path.exists(images_savedir):
os.makedirs(images_savedir)
if not os.path.exists(mask_savedir):
os.makedirs(mask_savedir)
# ----------------------------------------------------------------------------- #
filelist = os.listdir(mask_dir) # 只要有mask,那必然有orig
for file in filelist:
filename, _ = os.path.splitext(file)
file_path = os.path.join(orig_dir, file)
image = Image.open(file_path) # 用PIL打开图像
image = ImageOps.exif_transpose(image) # 消除相机的exif信息
w, h = image.size
mask_filepath = os.path.join(mask_dir, file)
mask_image = Image.open(mask_filepath)
mask_image = ImageOps.exif_transpose(mask_image) # 消除相机的exif信息
# 裁剪成688
newsize = (w * 688 // h, 688)
image_688 = image.resize(newsize, Image.ANTIALIAS) # 先等比例缩放再裁剪成矩形
box = (newsize[0] - 688, 0, newsize[0], newsize[1])
image_crop = image_688.crop(box)
mask_688 = mask_image.resize(newsize, Image.ANTIALIAS) # 先等比例缩放再裁剪成矩形
mask_crop = mask_688.crop(box)
save_len = len(os.listdir(save_dir)) + 1
image_crop.save(os.path.join(images_savedir, filename + f'_{save_len}.jpg'))
mask_crop.save(os.path.join(mask_savedir, filename + f'_{save_len}.png'))
print(f'{file} has been processed.')
print('done.')