Сообщить об ошибке.

Регулировка яркости, контрастности, резкости и насыщенности: Pillow в Python

Подмодуль ImageEnhance содержит ряд классов, которые можно использовать для регулировки яркости, контрастности, резкости и насыщенности изображения.

Содержание:


ImageEnhance.Color(image):

Класс ImageEnhance.Color() регулирует цветовой баланс (насыщенность) изображения.

Этот класс можно использовать для настройки цветового баланса (насыщенности) изображения способом, аналогичным элементам управления в Photoshop.

Класс ImageEnhance.Color() имеет один метод .enhance(factor), который возвращает улучшенное изображение. Аргумент factor управляет улучшением изображения. Коэффициент 1.0 всегда возвращает копию исходного изображения. Меньшие коэффициенты означают меньшую насыщенность цветом, а более высокие значения - большую насыщенность.

Коэффициент усиления factor, равный 0,0, дает черно-белое изображение.

Пример регулировки насыщенности:

from PIL import ImageGrab, ImageEnhance
import time

# делаем задержку в 2 секунды на выбор 
# окна, для которого нужно сделать скриншот
time.sleep(2)
# создание скриншота
img_tmp = ImageGrab.grab()
# сохраним оригинал
img_tmp.save('test-Color.jpg')

for factor in [0, 0.5, 2]:
    #######################
    # меняем насыщенность #
    #######################
    img = ImageEnhance.Color(img_tmp).enhance(factor)
    # сохраним измененное изображение
    img.save(f'test-Color-{factor}.jpg')

ImageEnhance.Contrast(image):

Класс ImageEnhance.Contrast() регулирует контрастность изображения.

Класс ImageEnhance.Contrast() имеет один метод .enhance(factor), который возвращает улучшенное изображение. Аргумент factor управляет улучшением изображения. Коэффициент 1.0 всегда возвращает копию исходного изображения. Меньшие коэффициенты означают меньшую контрастность, а более высокие значения - большую контрастность.

Коэффициент усиления factor равный 0,0, дает дает сплошное серое изображение.

Пример регулировки контрастности:

from PIL import ImageGrab, ImageEnhance
import time

# делаем задержку в 2 секунды на выбор 
# окна, для которого нужно сделать скриншот
time.sleep(2)
# создание скриншота
img_tmp = ImageGrab.grab()
# сохраним оригинал
img_tmp.save('test-Contrast.jpg')

for factor in [0, 0.5, 2]:
    #######################
    # меняем контрастность #
    #######################
    img = ImageEnhance.Contrast(img_tmp).enhance(factor)
    # сохраним измененное изображение
    img.save(f'test-Contrast-{factor}.jpg')

ImageEnhance.Brightness(image):

Метод ImageEnhance.Brightness() регулирует яркость изображения.

Класс ImageEnhance.Brightness() имеет один метод .enhance(factor), который возвращает улучшенное изображение. Аргумент factor управляет улучшением изображения. Коэффициент 1.0 всегда возвращает копию исходного изображения. Меньшие коэффициенты означают меньшую яркость, а более высокие значения - большую яркость.

  • Коэффициент усиления factor, равный 0,0, дает черное изображение.

Пример регулировки яркости:

from PIL import ImageGrab, ImageEnhance
import time

# делаем задержку в 2 секунды на выбор 
# окна, для которого нужно сделать скриншот
time.sleep(2)
# создание скриншота
img_tmp = ImageGrab.grab()
# сохраним оригинал
img_tmp.save('test-Brightness.jpg')

for factor in [0, 0.5, 2]:
    ######################
    # меняем Яркость #
    ######################
    img = ImageEnhance.Brightness(img_tmp).enhance(factor)
    # сохраним измененное изображение
    img.save(f'test-Brightness-{factor}.jpg')

ImageEnhance.Sharpness(image):

Метод ImageEnhance.Sharpness() регулирует резкость изображения.

Класс ImageEnhance.Sharpness() имеет один метод .enhance(factor), который возвращает улучшенное изображение. Аргумент factor управляет улучшением изображения. Коэффициент 1.0 всегда возвращает копию исходного изображения. Меньшие коэффициенты означают меньшую резкость (размытость), а более высокие значения - большую резкость.

  • Коэффициент усиления factor=0 дает размытое изображение
  • Коэффициент усиления factor=2 дает четкое изображение.

Пример регулировки резкости:

from PIL import ImageGrab, ImageEnhance
import time

# делаем задержку в 2 секунды на выбор 
# окна, для которого нужно сделать скриншот
time.sleep(2)
# создание скриншота
img_tmp = ImageGrab.grab()
# сохраним оригинал
img_tmp.save('test-Sharpness.jpg')

for factor in [0, 0.5, 2]:
    ###################
    # меняем резкость #
    ###################
    img = ImageEnhance.Sharpness(img_tmp).enhance(factor)
    # сохраним измененное изображение
    img.save(f'test-Sharpness-{factor}.jpg')

Обобщенный пример улучшения изображения.

В этом примере создается скриншот экрана и в цикле к оригиналу применяются изменения цветности, контрастности, яркости и резкости с разными настройками. Далее изображения объединяются в постер для сравнения.

from PIL import Image, ImageGrab, ImageEnhance
import time

# делаем задержку в 2 секунды на выбор 
# окна, для которого нужно сделать скриншот
time.sleep(2)
# создание скриншота
img_tmp = ImageGrab.grab()
# получим размеры
w, h = img_tmp.size
# уменьшим в 2 раза
new_size = (w//2, h//2)
img_tmp = img_tmp.resize(new_size)

# имена классов модуля ImageEnhance, 
# которые улучщают изображение
classes = ['Brightness', 'Color', 'Contrast', 'Sharpness']
for class_name in classes:
    # получаем объект класса в цикле по его имени
    obj = getattr(ImageEnhance, class_name)

    frames = []
    for factor in [0.3, 1, 2]:
        # изменяем изображение с 
        # текущим объектом класса
        img = obj(img_tmp).enhance(factor)
        # добавим измененное изображение в список
        frames.append(img)

    # объединим картинки из списка `frames``
    # для этого создадим подложку `poster`
    size = (new_size[0], new_size[1] * 3)
    poster = Image.new(img_tmp.mode, size)
    for i, frame in enumerate(frames):
        # рассчитываем отступ по высоте
        h = new_size[1] * i
        # вставляем картинку в постер
        poster.paste(frame, (0, h))
    # смотрим что получилось
    poster.save(f'test-{class_name}.jpg')