python用PIL库批量裁剪指定大小的图像(自动填充裁剪不完的部分)

2023-05-16

概述

主要功能:使用python代码裁剪批量图片
网上用python裁剪图片的代码有很多,但是往往没有考虑到图片裁剪不完的情况。举个例子,我有4096 * 1800的图片,想把它批量裁剪成1024 * 1024的图片,在宽度上刚好是4096/1024=4份,但在高度上1800/1024不能整除,为了保证图片的完整信息,这里我们只能进位,在高度上裁剪1800/1024 +1 =2份,因此一共裁剪成4 * 2 = 8张。
为了自己输入图像的方便就自己写了裁剪图像的代码,可以根据需求自己设置裁剪图像的大小,默认是裁剪出的图像宽高一致。

代码: crop.py

import os
from PIL import Image

#用PIL库批量裁剪指定大小的图像(自动填充)
def img_crop(img_path, save_path):
    files = os.listdir(img_path)
    for file in files:
        a, b = os.path.splitext(file)
        img = Image.open(os.path.join(img_path + "/" + file))
        width, hight = img.size
        w = 1024  # 需要切成图片块的大小,默认大小为w*w,可以自己设置
        id = 1
        i = 0
        padw = padh = 0  # 当宽高除不尽切块大小时,对最后一块进行填充
        if width % w != 0:
            padw = 1  # 宽除不尽的情况
        if hight % w != 0:
            padh = 1  # 高除不尽的情况

        # 默认从最左上角向右裁剪,再向下裁剪
        while i + w <= hight:
            j = 0
            while j + w <= width:
                new_img = img.crop((j, i, j + w, i + w))
                new_img.save(save_path + a + "_" + str(id) + b)
                id += 1
                j += w
            if padw == 1:  # 宽有除不尽的情况
                new_img = img.crop((width - w, i, width, i + w))
                new_img.save(save_path + a + "_" + str(id) + b)
                id += 1
            i = i + w

        if padh == 1:  # 高除不尽的情况
            j = 0
            while j + w <= width:
                new_img = img.crop((j, hight - w, j + w, hight))
                new_img.save(save_path + a + "_" + str(id) + b)
                id += 1
                j += w
            if padw == 1:
                new_img = img.crop((width - w, hight - w, width, hight))
                new_img.save(save_path + a + "_" + str(id) + b)
                id += 1


if __name__ == '__main__':
    # img_path:输入图像的路径
    img_path = '/home/xiaopeng/pythonProject/change_detection.pytorch/dataset/match2/test/'
    # save_path:图像保存的位置
    save_path = '/home/xiaopeng/pythonProject/change_detection.pytorch/dataset/match2/test_crop/'
    img_crop(img_path, save_path)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python用PIL库批量裁剪指定大小的图像(自动填充裁剪不完的部分) 的相关文章

  • cp: omitting directory ‘sp/’

    在linux中使用命令复制文件夹的时候出现的错误 xff1a cp omitting directory sp 解决办法 xff1a 使用递归拷贝 xff0c 在cp命令后面加上 r参数 xff0c 形如 xff1a cp r sp ica
  • LDR和ADR

    转自 xff1a https www douban com note 331036776 ARM汇编有ldr指令以及ldr adr伪指令 xff0c 他门都可以将标号表达式作为操作数 xff0c 下面通过分析一段代码以及对应的反汇编结果来说
  • 在显示屏上显示的数字的方法

    在现实屏上显示的数字的时候经常需要对数据进行分解 xff0c 得到数据 的每一位再依次显示 xff0c 方法有很多种 xff0c 下面介绍经常用到的3种方法 第一种方法 xff1a 不断的利用取整运算与取余运算得到每一位 void disp
  • 可变参数列表的简单实现

    使用可变参数列表实现一个sum函数 include lt stdio h gt define AUPBND sizeof int 1 define ADNBND sizeof int 1 define bnd X bnd sizeof X
  • 函数指针实例

    include lt stdio h gt void fun1 void printf 34 I 96 m fun1 n 34 void fun2 void printf 34 I 96 m fun2 n 34 void fun3 void
  • makefile小试牛刀

    使用make编译两个 c文件 div span style font size 14px a c void fun1 void int main fun1 return 0 span div div span style font size
  • 线程,进程,程序的区别

    转载自 xff1a https mp weixin qq com s O6 cZ9t8aJUMyeb7TbcbTQ 任务是代码运行的一个映象 xff0c 从系统的角度看 xff0c 任务是竞争系统资源的最小运行单元 任务可以使用或等待CPU
  • ubuntu14.04 samba服务器安装配置

    Data 2016 12 19 Author cjh Theme samba install andconfiguration 在介绍如何安装配置samba之前 xff0c 先简单介绍linux中两个命令的区别分别是update和upgra
  • 在数组中进行图形绘制

    include lt stdio h gt define k 2 43 1 define 2 define s 0 static unsigned short stop 61 s k k k k k k k s k k k k k k k
  • socket函数

    转自 xff1a http blog csdn net guoping16 article details 6584382 1 基本套接字函数 xff08 1 xff09 socket函数原型 socket 建立一个socket文件描述符
  • 进程与线程

    第一章 xff1a 计算机系统漫游 进程 xff1a 进程是操作系统对一个正在运行的程序的一种抽象 xff0c 一个系统可以同时运行多个进程 xff0c 看上去是CPU并发的执行多个程序 xff0c 实际上是通过进程切换来实现的 xff0c
  • GDI GDI+ 的区别

    转载自 xff1a http www cnblogs com lidabo p 3701252 html GDI 43 是GDI的下一个版本 xff0c 它进行了很好的改进 xff0c 并且易用性更好 GDI的一个好处就是你不必知道任何关于
  • GDI GDI+ 的区别

    转载自 xff1a http www cnblogs com lidabo p 3701252 html GDI 43 是GDI的下一个版本 xff0c 它进行了很好的改进 xff0c 并且易用性更好 GDI的一个好处就是你不必知道任何关于
  • 使用的DockPanel的心得

    使用这个控件的时候后一定要先Show this DockPlan1 才能使用DockTo this DockPlan1 DockStyle Bottom 固定位置 xff0c 否则会抛出异常
  • C#使用双缓冲解决绘图闪屏的问题

    最近在工作需要使用C 绘制图形 xff0c 看了一下绘制的函数觉得很简单就开始着手工作了 xff0c 但是在实际应用的时候发现鼠标进行绘制的时候会闪屏 xff0c 原因是图元重绘的时间不一致 xff0c 百度一下有很多更详细的 xff0c
  • 关于捕获键盘信息的processDialogkey方法

    转载自 xff1a http blog csdn net lucifinil s article details 6318189 在一些控件里的keydown方法 xff0c 没有办法捕获所有的按键消息 比如自己写一个窗体控件库 xff0c
  • C#泛型委托

    因为项目原因最近要使用C 进行编程 xff0c 于是每天现学现卖一点一点的进行开发 之前很长的时间一直使用C和C 43 43 进行编程 xff0c 于是转到C 一开始开始不是特别适应的 xff0c 特别是C 这门语言没有了指针 xff0c
  • 基于windows的Ubuntu双系统安装

    Data 2016 12 19 Author cjh Theme Ubuntu dual system installation 前期准备 1 Ubuntu相关版本镜像ios 2 UltraISO 用于制作U盘启动盘 3 EasyBCD 2
  • 汇编文件.S和.s的区别

    c C 原始程序 xff1b 预处理 编译 汇编 C C 43 43 原始程序 xff1b 预处理 编译 汇编 ccC 43 43 原始程序 xff1b 预处理 编译 汇编 cxx C 43 43 原始程序 xff1b 预处理 编译 汇编
  • 串口网口数据帧解析(支持连包、断传、错误数据过滤)

    本文转载自 xff1a https blog csdn net hwb 1988 article details 45872379 嵌入式系统中 xff0c 关于数据接受部分确实思考了很多 xff0c 下面总结下个人经验 关于串口传输 xf

随机推荐