Python处理图片亮度

使用python 采用原生库PIL中的方式调节图片亮度! 代码片.

import os
import math
from PIL import Image, ImageStat, ImageEnhance
import sys

# 读取图片原有的亮度值
def brightness(path):
    im = Image.open(path)
    stat = ImageStat.Stat(im)
    r,g,b = stat.mean
    return math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068 *(b**2))


# 获取文件亮度平均值
def brightness_avg(path):
    os.chdir(path)
    sum = 0.0
    img_len = len(os.listdir())
    for name_list_image in os.listdir():
        if name_list_image.endswith(".jpg"):
            image_url = os.getcwd()+'/'+name_list_image
            b = brightness(image_url)
            sum+=b
            print('%s=%s' %(image_url,b))
    avg = sum/img_len
    return avg



# 设置图片亮度
def set_brightness(b_avg,dir):
    for name_list_image in os.listdir():
        if name_list_image.endswith(".jpg"):
            image_url = os.getcwd()+'/'+name_list_image
            im = Image.open(image_url)
            im = ImageEnhance.Brightness(im).enhance(b_avg / brightness(image_url))
            # dir = r'C:\Users\Smart\Desktop\image\new'
            flag=os.path.exists(dir)
            if not flag:
                os.mkdir(dir)
            im.save(dir+'/'+name_list_image)


def main(path,dir):
    b_avg = brightness_avg(path)
    set_brightness(b_avg,dir)



if __name__ == "__main__":
    # path = r'图片文件路径'
    # dir = r'图片处理后的文件路径'
    path=''
    dir=''
    for i in range(1, len(sys.argv)):
        path = sys.argv[i]
        dir = sys.argv[i+1]
        break
    main(path,dir)

希望对大家有帮助,有问题请留言相互学习!