Handle images from the file.

有时需要批量处理某一文件夹内的所有图片,并将其保存在一个新的文件夹内。处理过程总结如下:

首先定义使用的库:

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)