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

Обесцвечивание/инверсия изображения, модуль Pillow в Python

В материале рассмотрены функции ImageOps.grayscale(), ImageOps.invert() модуля Pillow, которые позволяют преобразовать изображение в черно-белое с оттенками серого и создать негатив (инверсия цвета) изображения соответственно. Также рассмотрены функции пастеризации и соляризации изображения.

Содержание:


ImageOps.grayscale(image):

Метод ImageOps.grayscale() преобразование объект изображения image в черно-белое изображение с оттенками серого. Возвращает новый объект изображения.

from PIL import ImageGrab, ImageOps

# создание скриншота
img_orig = ImageGrab.grab()
img_orig.save('test_orig.png')

# обесцвечиваем скриншот 
img = ImageOps.grayscale(img_orig)
# сохраним для сравнения
img.save('test_grayscale.png')

ImageOps.invert(image):

Метод ImageOps.invert() инвертирует цвета объекта изображения image (создает негатив). Возвращает новый объект изображения.

from PIL import ImageGrab, ImageOps

# создание скриншота
img_orig = ImageGrab.grab()
img_orig.save('test_orig.png')

# создадим негатив скриншота 
img = ImageOps.invert(img_orig)
# сохраним для сравнения
img.save('test_invert.png')

ImageOps.posterize(image, bits):

Метод ImageOps.posterize() уменьшает количество бит bits для каждого цветового канала объекта изображения image. Возвращает новый объект изображения.

Аргумент bits количество битов для каждого канала (1-8) в результирующем объекте изображения.

from PIL import ImageGrab, ImageOps

# создание скриншота
img_orig = ImageGrab.grab()
img_orig.save('test_orig.png')

# уменьшим количество бит до 1 
img = ImageOps.posterize(img_orig, 1)
# сохраним для сравнения
img.save('test_posterize.png')

ImageOps.solarize(image, threshold=128):

Метод ImageOps.solarize() инвертирует все значения пикселей выше порогового значения threshold объекта изображения image. Возвращает новый объект изображения.

Аргумент threshold - это пороговое значение выше уровня которого все пиксели оттенков серого инвертируются.

from PIL import ImageGrab, ImageOps

# создание скриншота
img_orig = ImageGrab.grab()
img_orig.save('test_orig.png')

# сериализуем изображение
img = ImageOps.solarize(img_orig, 200)
# сохраним для сравнения
img.save('test_solarizee.png')

ImageOps.equalize(image, mask=None):

Метод ImageOps.equalize() выравнивает гистограмму объекта изображения image. Возвращает новый объект изображения.

Эта функция применяет нелинейное отображение к входному объекту изображения image, для создания равномерного распределения значений оттенков серого в выходном изображении.

Аргумент mask представляет собой необязательную маску. Если задана, то в анализ включаются только пиксели, выбранные маской.

from PIL import ImageGrab, ImageOps

# создание скриншота
img_orig = ImageGrab.grab()
img_orig.save('test_orig.png')

# равномерно распределяем оттенки серого
img = ImageOps.equalize(img_orig)
# сохраним для сравнения
img.save('test_equalize.png')