首页 > 解决方案 > 在 Python 中使用 PIL 进行亮度均衡

问题描述

我试图均衡亮度的文件夹中有多个灰度图像。增强必须应用于所有图像,除了第一个将是我们的参考图像。此外,这种变化只发生在图像的亮度上,而不是对比度,因为我想保留所有其他细节。这意味着直方图只有一个简单的移动,没有扩大。我试图使用 PIL 模块来计算平均亮度。这种方法可能更快,因为我可以在没有 numpy 数组转换的情况下做到这一点。

编码:

with open("Img_Locations.txt") as file: # Assume the file locations in a text file
    img_files = file.read().splitlines()
file.close()

self.images = [[] for x in range(len(img_files))]
for i in range(len(img_files)):
    images[i] = Image.open(img_files[i])

    im = images[i].convert('L')
    stat = ImageStat.Stat(im)
    ref_pil_original = int(stat.mean[0])

    enhancer = ImageEnhance.Brightness(im)
    enhanced_im = enhancer.enhance(1.5)
    stat2 = ImageStat.Stat(enhanced_im)
    ref_pil_bright = int(stat2.mean[0])

    print(ref_pil_original, ref_pil_bright)    

这里的示例输出是:

114  170
129  192
122  183

所以问题是为什么亮度增强在应用于相同的 1.5 倍时会为每个图像产生不同的差异(基本上该因素如何影响我的图像的像素)?如果是这种情况,我可以通过恒定因子调整图像亮度以确保最终平均值具有相同平均值的最快方法是什么?

python -- 测量像素亮度这里 PIL 图像是按像素读取的。那么这是否意味着我必须逐像素扫描图像才能完成我的要求?我想知道这是否确实是这样做的方法,因为已经有现有的功能。不幸的是,我只知道 PIL 和 OpenCV 用于图像分析,因此我读取图像的格式仅限于它们。

标签: python-3.xpython-imaging-library

解决方案


推荐阅读