Подмодуль ImageFilter
содержит определения для предопределенного набора фильтров, которые можно использовать для улучшения изображения с методом Image.filter()
.
Pillow
.Pillow
предоставляет следующие предустановленные фильтры для улучшения изображения:
ImageFilter.BLUR
- размытие изображения. Можно настроить необходимый тип и степень размытия, используя ImageFilter.BoxBlur()
или ImageFilter.GaussianBlur()
;ImageFilter.CONTOUR
- найти контуры изображения;ImageFilter.DETAIL
- детализация изображения;ImageFilter.EDGE_ENHANCE
- четкость границ изображения;ImageFilter.EDGE_ENHANCE_MORE
- улучшенная четкость границ изображения;ImageFilter.EMBOSS
- тисненое изображение;ImageFilter.FIND_EDGES
- идентифицирует границы изображения. Можно получить лучший результат, применив фильтр ImageFilter.SMOOTH
перед поиском границ;ImageFilter.SHARPEN
- улучшение резкости;ImageFilter.SMOOTH
- сглаживание артефактов изображения;ImageFilter.SMOOTH_MORE
- улучшенное сглаживание артефактов изображения.from PIL import Image, ImageFilter with Image.open("test.jpg") as imgF: bluF = imgF.filter (ImageFilter.BLUR) bluF.save("test_bluF.jpg") ## Найти контуры conF = imgF.filter (ImageFilter.CONTOUR) conF.save("test_conF.jpg") ## Обнаружение краев edgeF = imgF.filter (ImageFilter.FIND_EDGES) edgeF.save("test_edgeF.jpg")
Pillow
.from PIL import ImageGrab, ImageFilter import time with Image.open("test.jpg") as img_orig: img_boxblur = img_orig.filter(ImageFilter.BoxBlur(20)) img_boxblur.save('test_boxblur.png') img_gaussianblur = img.filter(ImageFilter.GaussianBlur(20)) img_gaussianblur.save('test_gaussianblur.png') img_minfilter3 = img_orig.filter(ImageFilter.MinFilter(3)) img_minfilter3.save('test_minfilter3.png') # то же, что и MinFilter(3) img_minfilter = img_orig.filter(ImageFilter.MinFilter) img_minfilter.save('test_minfilter.png')
ImageFilter.Color3DLUT()
преобразует 3-канальные пиксели, интерполируя ближайшие элементы,ImageFilter.BoxBlur()
размывает изображение по среднему значение пикселей в прямоугольнике,ImageFilter.GaussianBlur()
размытие по Гауссу,ImageFilter.UnsharpMask()
фильтр нерезкой маски,ImageFilter.Kernel()
фильтр ядра свертки,ImageFilter.RankFilter()
ранговый фильтр,ImageFilter.MedianFilter()
медианный фильтр,ImageFilter.MinFilter()
минимальный фильтр,ImageFilter.MaxFilter()
максимальный фильтр,ImageFilter.ModeFilter()
фильтр режима изображения,ImageFilter.Filter
абстрактный миксин, фильтрующий один канал изображения,ImageFilter.MultibandFilter
абстрактный миксин, фильтрующий многоканальные изображения.ImageFilter.Color3DLUT(size, table, channels=3, target_mode=None, **kwargs)
:Класс ImageFilter.Color3DLUT()
представляет собой трехмерную таблицу поиска цветов.
Преобразует 3-канальные пиксели, используя значения каналов в качестве координат в 3D-справочной таблице и интерполируя ближайшие элементы.
Этот фильтр позволяет применять практически любое преобразование цвета за постоянное время с помощью предварительно рассчитанных прореженных таблиц.
Аргументы:
size
: Размер таблицы. Одно значение int
или кортеж (int, int, int)
. Минимальный размер в любом измерении - 2, максимальный - 65.table
: Плоская интерполяционная таблица. Список из channels * size**3
элементов float
или список size**3
кортежей размера канала float
. Сначала меняются каналы, потом первое измерение, затем второе и третье. Значение 0,0 соответствует наименьшему значению выхода, 1,0 - наибольшему.channels
: Количество каналов в таблице. Может быть 3 или 4. Значение по умолчанию равно 3.target_mode
: Режим результирующего изображения. Должно быть не меньше каналов channels. Значение по умолчанию - None
, что означает, что режим изменен не будет.Color3DLUT().generate(size, callback, channels=3, target_mode=None)
:Метод класса Color3DLUT().generate() генерирует новый LUT, используя предоставленный обратный вызов callback
.
Аргументы:
size
: Размер таблицы. Передается в конструктор.callback
: Функция с тремя параметрами, которые соответствуют трем цветовым каналам. Будет вызван size**3
раз со значениями от 0,0 до 1,0 и должен вернуть кортеж с элементами каналовchannels
: Количество каналов, которые должны возвращать обратный вызов callback
.target_mode
: Передается конструктору результирующей таблицы поиска.Color3DLUT.transform(callback, with_normals=False, channels=None, target_mode=None)
:Метод Color3DLUT.transform() преобразует значения таблицы с помощью предоставленного обратного вызова callback
и возвращает новый LUT с измененными значениями.
Аргументы:- callback
: Функция, которая принимает старые значения таблицы поиска и возвращает новый набор значений. Количество аргументов, которые должна принимать функция, равно self.channels
или 3 + self.channels
, если установлен флаг with_normals
. Должен возвращать кортеж элементов self.channels
или channels
, если он установлен.- with_normals
: Если True
, то обратный вызов будет вызываться с координатами в цветовом кубе в качестве первых трех аргументов. В противном случае обратный вызов будет вызываться только с фактическими значениями цвета.- channels
: Количество каналов в результирующей таблице поиска.- target_mode
: Передается конструктору результирующей таблицы поиска.
ImageFilter.BoxBlur(radius)
:Класс ImageFilter.BoxBlur()
размывает изображение, устанавливая для каждого пикселя среднее значение пикселей в квадратном поле, расширяющем радиус пикселей в каждом направлении. Поддерживает плавающий радиус произвольного размера. Использует оптимизированную реализацию, которая выполняется за линейное время относительно размера изображения для любого значения радиуса.
Аргумент radius
- размер области в одном направлении. Радиус 0 не размывает и возвращает идентичное изображение. Радиус 1 занимает по 1 пикселю в каждом направлении, то есть всего 9 пикселей.
ImageFilter.GaussianBlur(radius=2)
:Класс ImageFilter.GaussianBlur()
размывает изображение с помощью последовательности расширенных прямоугольных фильтров, которые приближаются к ядру Гаусса.
Аргумент radius
- стандартное отклонение ядра Гаусса.
ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3)
:Класс ImageFilter.UnsharpMask()
представляет собой фильтр нерезкой маски.
Аргументы:
radius
: Радиус размытияpercent
: Нерезкая прочность, в процентахthreshold
: Порог определяет минимальное изменение яркости, которое будет увеличено.ImageFilter.Kernel(size, kernel, scale=None, offset=0)
:Класс ImageFilter.Kernel()
создает ядро свертки. Поддерживается только ядра 3x3 и 5x5 для целых чисел и ядер с плавающей запятой. Можно применять только к изображениям L
и RGB
.
Аргументы:
size
: Размер ядра в виде (width, height)
. Должно быть (3,3) или (5,5).kernel
: Последовательность, содержащая веса ядра.scale
: Масштаб. Если задано, то результат для каждого пикселя делится на это значение. По умолчанию используется сумма весов ядра.offset
: Смещение. Если задано, это значение добавляется к результату после того, как оно было разделено на scale
.from PIL import ImageGrab, ImageFilter # создание скриншота img_orig = ImageGrab.grab() img_orig.save('test_orig.png') # применяем фильтр `ImageFilter.Kernel` img = img_orig.filter(ImageFilter.Kernel((3, 3), (-1, -1, -1, -1, 9, -1, -1, -1, -1), 1, 0)) # сохраним для сравнения img.save('test_Filter_Kernel_9.png') # с другими весами ядра img = img_orig.filter(ImageFilter.Kernel((3, 3), (-1, -1, -1, -1, 11, -2, -2, -2, -2), 1, 0)) img.save('test_Filter_Kernel_11.png')
ImageFilter.RankFilter(size, rank)
:Класс ImageFilter.RankFilter()
создает ранговый фильтр. Ранговый фильтр сортирует все пиксели в окне заданного размера и возвращает ранговое значение.
Аргументы:
size
: Размер ядра, в пикселях.rank
: Какое значение пикселя выбрать. Используйте 0 для минимального фильтра, для медианного фильтра size * size / 2
, для максимального фильтра size * size - 1
и т. д.ImageFilter.MedianFilter(size=3)
:Класс ImageFilter.MedianFilter()
создает медианный фильтр. Выбирает среднее значение пикселя в окне заданного размера.
Аргумент size
- размер ядра, в пикселях.
ImageFilter.MinFilter(size=3)
:Класс ImageFilter.MinFilter()
создает минимальный фильтр. Выбирает наименьшее значение пикселя в окне с заданным размером.
Аргумент size
- размер ядра, в пикселях.
ImageFilter.MaxFilter(size=3)
:Класс ImageFilter.MaxFilter()
создает максимальный фильтр. Выбирает наибольшее значение пикселя в окне с заданным размером.
Аргумент size
- размер ядра, в пикселях.
ImageFilter.ModeFilter(size=3)
:Класс ImageFilter.ModeFilter()
создает фильтр режима изображения. Выбирает наиболее часто встречающееся значение пикселя в поле заданного размера.
Аргумент size
- размер ядра, в пикселях.
Значения пикселей, встречающиеся только один или два раза, игнорируются. Если ни одно значение пикселя не встречается более двух раз, то исходное значение пикселя сохраняется.
ImageFilter.Filter
:Класс ImageFilter.Filter
представляет собой абстрактный миксин, используемый для фильтрации изображений (для использования с Image.filter()
).
Разработчики должны предоставить следующий метод:
.filter(self, image)
:Этот метод применяет фильтр к одноканальному изображению image
или к одному каналу изображения image
. Должен возвращать отфильтрованную копию изображения.
ImageFilter.MultibandFilter
:Класс ImageFilter.MultibandFilter
представляет собой абстрактный миксин, используемый для фильтрации многоканальных изображений.
Разработчики должны предоставить следующий метод:
.filter(self, image)
:Этот метод применяет фильтр к многоканальному изображению image
. Должен возвращать отфильтрованную копию изображения.