将一张图片裁剪为多张320x320图片代码

该文章描述了一个Python脚本,用于裁剪tif格式的图片。脚本按照320x320像素的大小,以160像素的步长从左上角开始,向右然后向下滑动,进行图片裁剪。当滑动超出边界时,会保存边界内的图像。裁剪后的图片仍为tif格式,并保存在指定目录。
摘要由CSDN通过智能技术生成

我有多张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("全部图片切割完毕")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值