概述
主要功能:使用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)