2016-05-01 7 views
1

Ich versuche, ein JPG-Bild mit einem Png schwarz/transparent Maske zu maskieren, aber aufgrund von Aliasing und Grenze Unschärfe, ich habe immer in der Ausgabe eine Konturlinie des ursprünglichen jpg.PNG maskierten Bereich auf einem JPG mit Python Kissen (oder PIL) erhöhen

Da für die Aufgabe keine grafische Genauigkeit erforderlich ist, kann dies leicht durch Vergrößerung des maskierten Bereichs um einige Pixel gelöst werden.

Also zum Beispiel, wenn der maskierte Bereich einen zentrierten Kreis von 100px erlaubt, würde einfach das Pixel um "Pixel" erweitern, das Problem lösen.

Gibt es eine Möglichkeit, dies mit Pillow zu erreichen?

+0

Ich weiß Kissen nicht, aber wenn Sie einige Morphologie Funktionen in dort finden können, einen 'dilate' oder' erode' würde derjenige wahrscheinlich zu verwenden . –

+0

leider habe ich keine dilate/erode Funktion gefunden :(aber ich finde trotzdem eine Lösung. – Stormsson

Antwort

1

Ich fand eine Lösung; Ich schreibe es auf, damit andere davon profitieren können:

1) Verwende eine Gaußsche Unschärfe auf die Maske. dies wird „erweitern“, die Grenzen mit einem Schatten

1b) in Schwarz/Weiß-Farben konvertieren, wenn nur

benötigte

2) eine Transformation anwenden, dass jedes Pixel in schwarz oder weiß wandelt basierend auf einem Schwellenwert. keine anderen Farben erlaubt

so etwas ähnliches:

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)