最近在利用paddle的开源模型实现对图片内容的推理。但是由于部分图片过大,导致识别精度下降。根据初步实验结果,发现图片中后部分的信息都没有用,于是想到用Pillow库对图片进行裁剪,从而降低图片大小。
导入Pillow库及其他相关库
from PIL import Image
import os
import glob
from tqdm import tqdm
这边注意一下,Pillow目前最新的版本是10.0.0,如果要用resize对图片进行缩放并进重采样,一些功能已经更新了,请及时查看Pillow官方文档:https://www.osgeo.cn/pillow/
获取图片列表
pic_lst = [] #图片名列表
d_path = 'C:/Users/Lenovo/Desktop/group1' #图片位置
new_path = 'C:/Users/Lenovo/Desktop/result' #处理后图片的位置
os.chdir(d_path)
pic_lst.extend(glob.glob(f'*.png'))
裁剪图片并保存
裁剪图片利用的是crop方法,用法是:Image.crop(box=None)。box -- 裁剪矩形,作为(左、上、右、下)元组。坐标系原点是图片的最左上角。通过对比发现,我只需要图片的前面80%即可,所以 box = (0,0,pic.width,int(pic.height*0.8))。另外如果图片的高度小于2000px的话,模型推理精度是可以的,我选择不裁剪。
# 逐一处理每个图片
for i in tqdm(pic_lst):
path = d_path + '/' + i
pic = Image.open(path)
new_path_1 = new_path + '/' + i
if pic.height > 2000:
box = (0,0,pic.width,int(pic.height*0.8))
new_pic = pic.crop(box)
new_pic.save(new_path_1)
else:
pic.save(new_path_1)
print('end!')
运行,查看结果
我在处理批量数据的时候习惯使用tqdm这个库,方便可视化处理过程。图片裁剪成功!