import os
from PIL import Image, ImageOps
def modify_image(image_path):
# 打开图片并转化为灰度图
image = Image.open(image_path).convert('L')
# 计算需要添加的左右和上下边框的宽度
w, h = image.size
left_right_padding = (1024 - w) // 2
top_bottom_padding = (256 - h) // 2
# 如果图像宽度小于 1024,进行左右对称的方式扩充
if w < 1024:
# 左边边框的大小
left = left_right_padding
# 右边边框的大小
right = 1024 - w - left
# 上下边框大小
top = top_bottom_padding
bottom = 256 - h - top
# 扩充图像
image = ImageOps.expand(image, (left, top, right, bottom), fill=128)#fil=128代表填充区域会灰度值,可自行设定。(黑色为0)
# 如果图像宽度大于 1024,进行中心裁剪
elif w > 1024:
# 裁剪框的左上角和右下角坐标
left = (w - 1024) // 2
right = left + 1024
top = (h - 256) // 2
bottom = top + 256
# 进行裁剪
image = image.crop((left, top, right, bottom))
# 如果图像宽度等于 1024,进行上下对称的方式扩充
else:
# 左右边框大小
left = left_right_padding
right = left_right_padding
# 上下边框大小
top = top_bottom_padding
bottom = top_bottom_padding
# 扩充图像
image = ImageOps.expand(image, (left, top, right, bottom), fill=128) #fil=128代表填充区域会灰度值。
return image
def batch_modify_images(input_dir, output_dir):
for file_name in os.listdir(input_dir):
if file_name.endswith('.bmp'):
# 调用修改图片函数进行处理
image_path = os.path.join(input_dir, file_name)
modified_image = modify_image(image_path)
# 保存处理后的图片到指定目录
output_file_name = '' + file_name
output_path = os.path.join(output_dir, output_file_name)
modified_image.save(output_path)
input_dir = './1'
output_dir = './2'
batch_modify_images(input_dir, output_dir)