[PYTHON] Machen Sie Ihre Fotos mit dem Pillow's Mode Filter bildlich

Jetzt, da wir wissen, wie man den ImageFilter.ModeFilter des Kissens effektiv einsetzt, werden wir ihn verwenden, um einen malerähnlichen Filter zu erstellen. Ich benutze kein Numpy usw., nur Kissen.

Das Originalbild

mono.jpg

Nach der Konvertierung

ダウンロード (1).png

Dies ist die einzige Quelle.

from PIL import Image, ImageChops, ImageOps, ImageFilter

img = Image.open("test.jpeg ")
qant_img = img.quantize(8, kmeans=True).convert("RGB")

t = qant_img
t = t.filter(ImageFilter.ModeFilter(12))
t = t.filter(ImageFilter.GaussianBlur(5))
t = t.filter(ImageFilter.ModeFilter(12))
t = t.filter(ImageFilter.GaussianBlur(1))
color_img = t.convert("RGB")

gray = img.convert("L")
gray2 = gray.filter(ImageFilter.MaxFilter(5))
line_inv = ImageChops.difference(gray, gray2)
line_img = ImageOps.invert(line_inv).convert("RGB")

ImageChops.multiply(color_img, line_img)
2017/02/24 Es gab einen Fehler in der Quelle, also habe ich ihn behoben

Kommentar

Farbverblassen

Wenn die Anzahl der Farben groß ist, ist es zunächst schwierig, sie wie ein Gemälde aussehen zu lassen, sodass sie reduziert wird. Verwenden Sie zur Farbreduzierung "Image.quantize". Die Anzahl der Farben kann eine beliebige Anzahl sein, aber je kleiner die Anzahl der Farben ist, desto solider ist die Farbe. Hier wird die kmeans-Methode verwendet, um die Anzahl der Farben auf acht zu reduzieren. Für Bilder mit einer großen Anzahl von Farben ist es möglicherweise besser, 16 bis 32 Farben zu verwenden.

qant_img = img.quantize(8, kmeans=True).convert("RGB")

ダウンロード.png

Machen Sie ein Füllbild

Ich wusste bis jetzt nicht, wie man "ImageFilter.ModeFilter" verwendet, aber wenn ich es anwende, wird die Farbe eintönig. Da die Faltungsoperation ausgeführt wird, die den häufigsten Wert im Kernelfenster auswählt, wird der Farbbereich erweitert.

t = qant_img.filter(ImageFilter.ModeFilter(12))

ダウンロード (1).png

Es wird mehr wie ein Gemälde.

Wiederholen Sie abwechselnd die Gaußsche Unschärfe und die Monotonisierung

Dieses Mal möchte ich "Blutung" ausdrücken, also werde ich Gaußsche Unschärfe hinzufügen, um sie wieder eintönig zu machen. Wenn Sie "Monotonisierung → Gaußsche Unschärfe" wiederholen, blutet das Bild immer mehr. Zum Schluss möchte ich, dass es etwas verschwommen aussieht, also wende ich leicht eine Gaußsche Unschärfe an.

t = t.filter(ImageFilter.GaussianBlur(5))
t = t.filter(ModeFilter(12))
t = t.filter(ImageFilter.GaussianBlur(1))

ダウンロード (2).png

Wenn Sie mehr Blutungen bekommen möchten, wiederholen Sie "monoton → Gaußsche Unschärfe" mehr, aber diesmal sollte es darum gehen.

Machen Sie eine Strichzeichnung

Erstellen Sie schließlich eine Strichzeichnung aus dem Originalbild. Der Algorithmus basierte auf hier. Obwohl diese Methode einfach ist, wird sie empfohlen, da sie sehr schöne Strichzeichnungen erzeugen kann.

gray = img.convert("L")
gray2 = gray.filter(ImageFilter.MaxFilter(5))
line_inv = ImageChops.difference(gray, gray2)
line_img = ImageOps.invert(line_inv).convert("RGB")

ダウンロード (3).png

Kombinieren Sie Füllbild und Strichzeichnung

Kombinieren Sie diese beiden schließlich, um den Vorgang abzuschließen.

ImageChops.multiply(color_img, line_img)

ダウンロード (4).png

Zusammenfassung

Wenn Sie die Parameter etwas stärker anpassen, können Sie sie möglicherweise besser ausdrücken. Die Kombination von "ImageFilter.ModeFilter" und Gaußscher Unschärfe verursacht "Blutungen", daher denke ich, dass sie für etwas verwendet werden können.

Schließlich ist eine Parametereinstellung erforderlich, und wenn der Wert von "ImageFilter.ModeFilter" auf etwa 5 eingestellt ist, wird "Ausbluten" gemildert.

ダウンロード (8).png

Recommended Posts

Machen Sie Ihre Fotos mit dem Pillow's Mode Filter bildlich
Machen Sie einen Filter mit einer Django-Vorlage
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
Erstellen Sie schnell Ihr eigenes Modul mit setuptools (Python)
Erstelle deinen eigenen Musik-Player mit Bottle0.13 + jPlayer2.5!