Увеличьте замаскированную область PNG на JPG с помощью Python Pillow (или PIL)

Я пытаюсь замаскировать изображение jpg с помощью черной / прозрачной маски png, но из-за сглаживания и размытия границ я всегда получаю на выходе контурную линию исходного jpg.

Поскольку задача не требует графической точности, это можно легко решить, увеличив маскируемую область на несколько пикселей.

Так, например, если замаскированная область допускает центрированный круг размером 100 пикселей, простое «расширение» круга на некоторый пиксель решит проблему.

Есть ли способ добиться этого с помощью подушки?


person Stormsson    schedule 01.05.2016    source источник
comment
Я не знаю Pillow, но если вы можете найти там какие-то морфологические функции, то, вероятно, лучше всего использовать dilate или erode.   -  person Mark Setchell    schedule 02.05.2016
comment
к сожалению, я не нашел функцию расширения / размытия :( но я все равно нахожу решение.   -  person Stormsson    schedule 02.05.2016


Ответы (1)


Я нашел решение; Я записываю это, чтобы другие могли получить пользу в случае необходимости:

1) примените к маске размытие по Гауссу. это "расширит" границы тенью

1b) конвертировать в черный / белый цвета только при необходимости

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

так что-то похожее:

blackThreshold = 128.0
img = img.filter(ImageFilter.GaussianBlur(radius=3))
r,g,b,a = img.split() # supposing to have a RGBA PNG
gray = Image.merge('L',(a,)) # 
gray = gray.point(lambda x: 0 if x<blackThreshold else 255)
person Stormsson    schedule 02.05.2016