Automatisierung der Bildverarbeitung mit Jupyter und Python

Sie werden sich wahrscheinlich nicht mit der Bildverarbeitung in Grafikeditoren befassen wollen, wenn Sie wissen, wie man Open Source-Bibliotheken für Python verwendet.







Vor kurzem wollte mein Kind eine Figur für eine Figur aus seinem Lieblings-Cartoon machen. Die offensichtliche Lösung bestand darin, eine Art Grafikeditor für Linux zu verwenden (weil ich ein Linux-Benutzer bin), aber dann erinnerte ich mich, dass ich eine faule Person bin.



Zum Glück kenne ich Python und JupyterLab. Mal sehen, wie Jupyter die Aufgabe erleichtert.



Zunächst benötigen wir natürlich eine moderne Version von Python (wenn Sie ein MacOS-Benutzer sind, können Sie diesem Tutorial folgen ). Dann müssen Sie JupyterLab und Pillow installieren und öffnen - eine Abzweigung der Python Imaging Library (PIL):



$ python -V

Python 3.8.5

$ pip install jupyterlab pillow

……………………..

$ jupyter lab


In diesem Fall wollen wir mit dem Bild eines Hirsches malen. Laden Sie zunächst das Bild herunter und speichern Sie es lokal. Verwenden Sie am besten Bilder aus Creative Commons oder anderen Open Source-Lizenzen, damit Sie sich nicht um das Urheberrecht kümmern. In diesem Beispiel habe ich ein Open Source-Image von Unsplash verwendet und es Deer.jpg genannt.



Beginnen wir mit dem Import:



from PIL import Image


Öffnen wir das Bild und überprüfen seine Größe:



pic = Image.open("deer.jpg")
pic.size
(3561, 5342)


Das ist vielleicht etwas zu viel für unsere Aufgabe. Diese hochauflösenden Bilder eignen sich gut für Bücher, nicht für Malvorlagen. Reduzieren Sie die Bildgröße:



x, y = pic.size

x //= 10

y //= 10

smaller = pic.resize((x, y))


Die Größe ist zehnmal kleiner geworden.



smaller






Perfekt. Weitermachen.



Dieses Reh sollte eine leichte Beute für den Grenzerkennungsalgorithmus sein. Wir müssen das Bild bereinigen, um das Färben zu vereinfachen. Und zum Glück gibt es auch dafür einen vorgefertigten Algorithmus:



from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)

edges






Dies ist wahrscheinlich der wichtigste Schritt. Wir werden alle überflüssigen Details entfernen und klare Linien hinterlassen. Die Farbe ist etwas seltsam, aber dieses Problem ist nicht schwer zu lösen. Teilen Sie das Bild in Farbstreifen und wählen Sie den mit den klarsten Linien aus:




bands = edges.split()
bands[0]






Jetzt sind die Linien klar, aber die Palette selbst ist noch nicht zum Drucken geeignet, da Ihrem Drucker die Tinte ausgeht und Ihr Kind kein Bild auf einem schwarzen Hintergrund malen möchte. Also kehren wir die Farben um. Stellen Sie die Schwellenwerte für x auf max-schwarz und max-weiß ein, um die Linien noch deutlicher zu machen:




outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline






Lassen Sie uns nun darauf achten, dass auf dem Bild noch viel Platz frei ist. Schneiden wir ihn also zu:



outline.crop((10, 200, 300, 400))






Nun, das ist alles. Speichern wir das Bild im PDF-Format (zum Drucken):



outline.save("deer.pdf")


So können Sie ganz einfach Ihre eigenen Malvorlagen für Ihre Kinder erstellen: minimale Routine, maximale Programmierung!






Werbung



Epische Server sind Linux- oder Windows-VPS mit leistungsstarken AMD EPYC-Prozessoren und sehr schnellen Intel NVMe-Laufwerken. Zerstreuen wie heiße Kuchen!






All Articles