Подушка-эквивалент диалога яркости и контрастности GIMP? - PullRequest
1 голос
/ 24 июня 2019

Как настроить контрастность и яркость изображения в соответствии с диалогом GIMP Colours> Brightness-Contrast?

enter image description here

Яркость-110 и контраст 127 - это то, чего я хочу достичь.

Я нашел эту функцию из этого ответа :

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 существует, но у него есть неограниченное число с плавающей точкой в ​​качестве параметра, как мне преобразовать значения, которые я использую в 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 голосов
/ 24 июня 2019

Документы объясняют:

Этот класс может использоваться для управления яркостью изображения.Коэффициент усиления 0,0 дает черное изображение.Исходное изображение дает коэффициент 1,0.

Чтобы точно соответствовать поведению в GIMP, вы можете отобразить диапазон от 0,0 до 1,0 на диапазон GIMP, например, используя найденный код здесь :

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

Или хорошее решение, которое использует найденные функции интерполяции SciPy здесь :

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