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

Операции с каналами изображений, модуль Pillow в Python

Подмодуль ImageChops модуля Pillow в Python

Подмодуль ImageChops содержит ряд арифметических операций с изображениями, называемых операциями с каналами (chops). Их можно использовать для различных целей, включая специальные эффекты, композицию изображений, алгоритмическое рисование и многое другое.

В настоящее время большинство операций с каналами реализовано только для 8-битных изображений (например, 'L' и 'RGB').

Большинство операций с каналами принимают один или два изображения и возвращают новое изображение. Если не указано иное, результат операции канала всегда обрезается до диапазона от 0 до 255.

Содержание:

Все представленные ниже операции легко повторяются при помощи модуля NumPy. Дополнительно смотрите материал "Функция Image.fromarray() модуля Pillow в Python".


ImageChops.add(image1, image2, scale=1.0, offset=0):

Метод ImageChops.add() накладывает 1-е изображение image1 на второе image2, делит результат на масштаб scale и добавляет смещение offset.

Если scale и offset опущены, то масштаб по умолчанию равен 1,0, а смещение - 0,0.

Формула для ImageChops.add() при обработке изображения в NumPy.

arr_out = ((arr_image1 + arr_image2) / scale + offset)

ImageChops.add_modulo(image1, image2):

Метод ImageChops.add_modulo() накладывает два изображения, не обрезая результат.

Формула для ImageChops.add_modulo() при обработке изображения в NumPy, где MAX=255 для 8-битных изображений.

arr_out = ((arr_image1 + arr_image2) % MAX)

ImageChops.blend(image1, image2, alpha):

Метод ImageChops.blend() смешивает два изображения, используя постоянный вес прозрачности. Псевдоним для Image.blend().

Формула для ImageChops.blend() при обработке изображения в NumPy.

arr_out = arr_image1 * (1.0 - alpha) + arr_image2 * alpha

ImageChops.composite(image1, image2, mask):

Метод ImageChops.composite() создает композицию из 2-х изображений image1 и image2, используя маску прозрачности mask. Псевдоним для Image.composite().

Формула для ImageChops.composite() при обработке изображения в NumPy.

для маски в режиме `1`
arr_out = arr_mask * arr_image1 + (1 - arr_mask) * arr_image2

для маски в режиме `L`
arr_out = arr_mask / 255 * arr_image1 + (1 - arr_mask / 255 ) * arr_image2

ImageChops.constant(image, value):

Метод ImageChops.constant() заполняет канал заданным уровнем серого.

ImageChops.darker(image1, image2):

Метод ImageChops.darker() сравнивает два изображения, пиксель за пикселем, и возвращает новое изображение, содержащее более темные значения.

Формула для ImageChops.darker() при обработке изображения в NumPy.

arr_out = min(arr_image1, arr_image2)

ImageChops.difference(image1, image2):

Метод ImageChops.difference() возвращает абсолютное значение попиксельной разницы между двумя изображениями.

Формула для ImageChops.difference() при обработке изображения в NumPy.

arr_out = abs(arr_image1 - arr_image2)

ImageChops.duplicate(image):

Метод ImageChops.duplicate() копирует каналы изображения. Псевдоним для метода Image.copy().

ImageChops.invert(image):

Метод ImageChops.invert() инвертирует изображение (канал).

Формула для ImageChops.invert() при обработке изображения в NumPy, где MAX=255 для 8-битных изображений.

arr_out = MAX - arr_image

ImageChops.lighter(image1, image2):

Метод ImageChops.lighter() сравнивает два изображения, пиксель за пикселем, и возвращает новое изображение, содержащее более светлые значения.

Формула для ImageChops.lighter() при обработке изображения в NumPy.

arr_out = max(arr_image1, arr_image2)

ImageChops.logical_and(image1, image2):

Метод ImageChops.logical_and() логическое AND между двумя изображениями.

Оба изображения должны иметь режим 1. Если необходимо выполнить логическое AND над изображением с режимом, отличным от 1, необходимо использовать функцию ImageChops.multiply(), а в качестве второго изображения применить черно-белую маску.

Формула для ImageChops.logical_and() при обработке изображения в NumPy.

arr_out = ((arr_image1 and arr_image2) % MAX)

ImageChops.logical_or(image1, image2):

Метод ImageChops.logical_or() логическое OR между двумя изображениями.

Оба изображения должны иметь режим 1.

Формула для ImageChops.logical_or() при обработке изображения в NumPy.

arr_out = ((arr_image1 or arr_image2) % MAX)

ImageChops.logical_xor(image1, image2):

Метод ImageChops.logical_xor() логическое XOR между двумя изображениями.

Оба изображения должны иметь режим 1.

Формула для ImageChops.logical_xor() при обработке изображения в NumPy.

arr_out = ((bool(arr_image1) != bool(arr_image2)) % MAX)

ImageChops.multiply(image1, image2):

Метод ImageChops.multiply() накладывает два изображения друг на друга

Если умножить изображение на сплошное черное изображение, то результат будет черным. Если умножить на сплошное белое изображение, то изображение не изменится.

Формула для ImageChops.multiply() при обработке изображения в NumPy, где MAX=255 для 8-битных изображений.

arr_out = arr_image1 * arr_image2 / MAX

ImageChops.soft_light(image1, image2):

Метод ImageChops.soft_light() накладывает два изображения друг на друга с помощью алгоритма Soft Light.

ImageChops.hard_light(image1, image2):

Метод ImageChops.hard_light() накладывает два изображения друг на друга с помощью алгоритма Hard Light.

ImageChops.overlay(image1, image2):

Метод ImageChops.overlay() накладывает два изображения друг на друга с помощью алгоритма Overlay.

ImageChops.offset(image, xoffset, yoffset=None):

Метод ImageChops.offset() возвращает копию изображения, где данные были смещены на заданное расстояние xoffset.

Данные переносятся по краям. Если yoffset опущен, то предполагается, что оно равно xoffset.

Принимаемые аргументы:

  • image: Входное изображение.
  • xoffset: Расстояние в пикселях по горизонтали
  • yoffset: Расстояние в пикселях по вертикали.

ImageChops.screen(image1, image2):

Метод ImageChops.screen() накладывает два перевернутых изображения друг на друга

Формула для ImageChops.screen() при обработке изображения в NumPy, где MAX=255 для 8-битных изображений.

arr_out = MAX - ((MAX - arr_image1) * (MAX - arr_image2) / MAX)

ImageChops.subtract(image1, image2, scale=1.0, offset=0):

Метод ImageChops.subtract() вычитает два изображения image1 и image2, делит результат по масштабу scale и добавляет смещение offset.

Если scale и offset опущены, то масштаб по умолчанию равен 1,0, а смещение - 0,0.

Формула для ImageChops.subtract() при обработке изображения в NumPy.

arr_out = ((arr_image1 - arr_image2) / scale + offset)

ImageChops.subtract_modulo(image1, image2):

Метод ImageChops.subtract_modulo() вычитает два изображения image1 и image2, не обрезая результат

Формула для ImageChops.subtract_modulo() при обработке изображения в NumPy, где MAX=255 для 8-битных изображений.

arr_out = ((arr_image1 - arr_image2) % MAX)