我有多张tif格式的图片,现在以下面的裁剪策略进行裁剪:
1. 以320x320大小从左上原点出开始向右滑动,每次滑动距离为160个像素,每滑动一次切割出320x320大小的图片保存,保存格式为tif;
2. 滑到最左端,如果再向右滑动160像素则超出边界,则将边界内切割保存,保存格式为tif,在这行第一次遇到出界的情况,则在切割完毕之后,不再向右滑动
3. 接下来,回到图片的左边,向下滑动160像素长度,之后再向右滑动,重复1,2步骤
4. 滑到最底部,如果再向下滑动160像素则超出边界,则将边界内切割保存,保存格式为tif,在这列第一次遇到出界的情况,则在切割完毕之后,不再向下滑动
5. 之后在这行向右滑动,重复1,2步骤,等到这一行最后一个图片切割保存之后,这张图片裁剪完毕,跳到下一张图片,以相同方式进行裁剪。
裁剪代码如下:
from PIL import Image
import os
# 设置裁剪大小和步长
crop_size = (320, 320)
step_size = 160
# 文件地址
input_folder = r'C:\Users\24317\Desktop\123'
output_folder = r'C:\Users\24317\Desktop\234'
# 获取所有tif格式图片文件名
img_files = [f for f in os.listdir(input_folder) if f.endswith('.tif')]
for img_file in img_files:
# 打开图片
print(f"读取{img_file}")
img_path = os.path.join(input_folder, img_file)
img = Image.open(img_path)
img_width, img_height = img.size
# 初始化裁剪区域左上角坐标
x, y = 0, 0
# 循环裁剪图片
while y + crop_size[1] <= img_height:
# 向右滑动
while x + crop_size[0] <= img_width:
# 裁剪并保存图片
crop_box = (x, y, x + crop_size[0], y + crop_size[1])
cropped_img = img.crop(crop_box)
save_path = os.path.join(output_folder,
f"{os.path.splitext(img_file)[0]}_{x,y}-{x + crop_size[0],y + crop_size[1]}.tif")
cropped_img.save(save_path)
# 向右滑动
x += step_size
# 如果向右滑动后超出边界,则保存边界内图片
if x + crop_size[0] > img_width:
crop_box = (x, y, img_width, y + crop_size[1])
cropped_img = img.crop(crop_box)
save_path = os.path.join(output_folder,
f"{os.path.splitext(img_file)[0]}_{x,y}-{img_width,y + crop_size[1]}.tif")
cropped_img.save(save_path)
# 重置x坐标为0,向下滑动
x = 0
y += step_size
# 如果向下滑动后超出边界,则保存边界内图片
if y + crop_size[1] > img_height:
# 向右滑动
while x + crop_size[0] <= img_width:
# 裁剪并保存图片
crop_box = (x, y, x + crop_size[0], img_height)
cropped_img = img.crop(crop_box)
save_path = os.path.join(output_folder,
f"{os.path.splitext(img_file)[0]}_{x,y}-{x + crop_size[0], img_height}.tif")
cropped_img.save(save_path)
# 向右滑动
x += step_size
# 如果向右滑动后超出边界,则保存边界内图片
if x + crop_size[0] > img_width:
crop_box = (x, y, img_width, img_height)
cropped_img = img.crop(crop_box)
save_path = os.path.join(output_folder,
f"{os.path.splitext(img_file)[0]}_{x, y}-{x, y, img_width, img_height}.tif")
cropped_img.save(save_path)
print(f"{img_file}切割完毕")
print("==================================")
print("==================================")
print("全部图片切割完毕")