如何调整图像的对比度和亮度以匹配GIMP的Colours
> Brightness-Contrast
对话框?
我想要达到-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)
答案 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))