Handle images from the file.
有时需要批量处理某一文件夹内的所有图片,并将其保存在一个新的文件夹内。处理过程总结如下:
首先定义使用的库:
os
:用于读取文件imghdr
:用于判断文件是否为图像文件
import os
import imghdr
主体如下:
def main():
root_path = r'masks' # 原始文件路径
new_path = r'sized_masks' # 目标文件路径
for root, dirs, files in os.walk(root_path):
new_root_path = root.split(root_path)[1]
sub_path = new_path + new_root_path # 目标路径
if not os.path.exists(new_path + new_root_path):
os.mkdir(new_path + new_root_path) # 在新路径创建对应文件夹
for file in files:
file_path=os.path.join(root,file)
if imghdr.what(file_path) is not None:#判断是不是图片文件
# 异常处理,碰到损坏的图片会打印,并继续执行
try:
handle_img(file_path,sub_path,file) # 处理图片的函数
except:
print('%s处理异常'%file_path)
else:
pass
在处理图片时,通过以下库简化过程:
from PIL import Image
import numpy as np
图片处理函数如下:
def handle_img(path,sub_path,file):
im = Image.open(path)
# 把图片格式转换为灰度图
im = im.convert('L')
# 把图片中像素值为33的像素调整为255
npImage = np.array(im)
LUT = np.zeros(256,dtype = np.uint8)
LUT[33] = 255
pixels = LUT[npImage]
im = Image.fromarray(pixels)
# 调整图片大小
(x, y) = im.size
new_x = x*2
new_y = y*2
out = im.resize((new_x, new_y), Image.ANTIALIAS)
savepath = os.path.join(sub_path, file) # 保存路径
out.save(savepath)
print('%s处理完成' % savepath)