枕头相当于GIMP的“亮度对比”对话吗?

时间:2019-06-24 11:10:03

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

如何调整图像的对比度和亮度以匹配GIMP的Colours> Brightness-Contrast对话框?

enter image description here

我想要达到-110的亮度和127的对比度。

我从this answer找到了这个功能:

def change_contrast(img, level):
    factor = (259 * (level + 255)) / (255 * (259 - level))
    def contrast(c):
        value = 128 + factor * (c - 128)
        return max(0, min(255, value))
    return img.point(contrast)

此功能可再现具有所需值的对比度,但找不到亮度的等效值。

我知道存在ImageEnhance模块,但是该模块具有不受限制的float作为参数,如何将在gimp中使用的值转换为这种格式?还是我可以将这些值插入其中的另一种解决方案。 ImageEnhance文档未解释此参数的工作原理。

from PIL import Image, ImageEnhance

img = Image.open(path)
enhancer = ImageEnhance.Brightness(img)
img = enhancer.enhance(0.2)
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)

1 个答案:

答案 0 :(得分:0)

文档说明:

  

此类可用于控制图像的亮度。一个   增强因子0.0给出黑色图像。 1.0的系数给出   原始图像。

要完全匹配GIMP中的行为,您可以将0.0到1.0的范围映射到GIMP范围,例如使用 找到的代码here

def maprange( a, b, s):
    (a1, a2), (b1, b2) = a, b
    return  b1 + ((s - a1) * (b2 - b1) / (a2 - a1))

或者使用here中发现的SciPy插值函数的好的解决方案:

from scipy.interpolate import interp1d
m = interp1d([gimp_lower, gimp_upper],[0.0, 1.0])
print(m(50))
相关问题