Konvertieren Sie jedes Bild mit Python in eine Skizze

Konvertieren Sie jedes Bild mit Python in eine Skizze

Das Erstellen einer schönen Skizze erfordert viel Zeit und Mühe. Glücklicherweise hat sich die Programmierung weiterentwickelt, sodass Sie jetzt Bilder einfach umwandeln und schöne Designs erstellen können. Eine beeindruckende Technik, die Sie ausführen können, besteht darin, ein Bild in eine digitale Skizze umzuwandeln.

Während eine mechanische Skizze nicht genau wie Ihre eigene Bleistiftzeichnung aussieht, lohnt es sich dennoch, mit der Ausgabe zu experimentieren. Erfahren Sie, wie Sie eine solche App mit dem OpenCV-Modul in der superfreundlichen Python-Sprache programmieren.

Das OpenCV-Modul

OpenCV ist eine von Intel entwickelte und gepflegte Open-Source-Bibliothek von Computer-Vision-Methoden, die für Bildverarbeitung und Computer Vision verwendet werden. Es macht es Benutzern einfach, optimierte Anwendungen zu erstellen, mit Bildern und Videos in Echtzeit zu interagieren und den idealen Algorithmus für ihre Bedürfnisse auszuwählen.

Zu den beliebten Anwendungen von OpenCV gehören Gesichtserkennung, automatische Gesichtsverfolgung in der Kinematografie, Filter für soziale Medien, Autokennzeichenerkennung und CCTV-Überwachung. Um das OpenCV-Modul in Python zu verwenden, öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:

pip install opencv-python

So konvertieren Sie jedes Bild mit Python in eine Skizze

Um Ihr Lieblingsbild in eine digitale Skizze umzuwandeln, platzieren Sie es zunächst im selben Ordner wie ein neues Python-Programm, um es einfach referenzieren zu können. Beginnen Sie dann mit der Erstellung Ihres Programms mit den folgenden Schritten.

Der erste Schritt besteht darin, das OpenCV-Modul in Ihre Umgebung zu importieren. Sobald OpenCV verfügbar ist, können Sie seine Funktionalität verwenden, um verschiedene Aufgaben auszuführen. Übergeben Sie den Pfad Ihrer Bilddatei an die Funktion imread() , um sie zu laden. Speichern Sie Ihr Bild in einer Variablen – hier image1 genannt – für zukünftige Referenzzwecke.

Speichern Sie den Titel des Fensters in einer Variablen namens window_name . Dies ist nützlich, wenn Sie das Bild mit der Funktion imshow() anzeigen möchten . Diese Funktion erfordert zwei Parameter: den Titel und das anzuzeigende Bild.

import cv2

image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)

Sobald Sie das gewünschte Bild haben, müssen Sie fünf Operationen ausführen, um es in eine Skizze umzuwandeln. Konvertieren Sie zuerst das Farbbild in Graustufen. Sie können dies mit der Funktion cvtColor() tun . Diese Funktion übernimmt das Bild, dessen Farben Sie ändern möchten, und einen Konvertierungscode wie COLOR_BGR2GRAY .

grey_img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)

Sobald Sie ein Graustufenbild haben, kehren Sie seine Farben um. An dieser Stelle müssen Sie verstehen, wie ein Computer ein Bild erzeugt. Ein Bild besteht aus vielen winzigen Pixeln mit unterschiedlicher Intensität. In einem Farbbild enthält jedes Pixel rote, grüne und blaue Komponenten mit jeweils einer Intensität zwischen 0 und 255.

In einem Graustufenbild gibt es nur Graustufen, daher variiert die Intensität eines Pixels zwischen 0 und 1. Um die Pixelintensitäten dieses Bildes umzukehren, übergeben Sie das Graustufenbild an die Funktion bitwise_not() .

Wie der Name schon sagt, invertiert diese Funktion den Wert jedes Pixels in sein komplementäres Äquivalent. Alle Pixel, die größer als 0 sind, werden auf 0 gesetzt, und alle Pixel, die gleich 0 sind, werden auf 255 gesetzt.

invert = cv2.bitwise_not(grey_img)

Nachdem Sie die Pixelintensitäten invertiert haben, können Sie das Bild mit Hilfe von Gaußscher Weichzeichner glätten. Der Gaußsche Weichzeichner-Prozess verwendet einen Gaußschen Filter. Ein Gaußscher Filter ist ein Tiefpassfilter, der nur niedrige Frequenzen durchlässt und die hochfrequente Komponente eines Signals oder Bildes entfernt.

Die Funktion GaussianBlur() von OpenCV akzeptiert vier Parameter. Dies sind ein Matrixobjekt, das als Quellbild fungiert, die ksize (Größe des Kernels) und sigmaX (die Gaußsche Kernel-Standardabweichung).

Angenommen, Sie haben ein physisches Foto in der Hand. Wenn Sie es verwischen möchten, können Sie Stücke Wachs oder Pergamentpapier darüber auftragen. Sie können sich den Kern als dieses durchsichtige Stück Papier vorstellen. Digital läuft das etwas anders ab. Um ein digitales Bild zu verwischen, zu schärfen und andere Effekte anzuwenden, multiplizieren Sie eine Matrix mit der Intensität der Bildpixel.

Die ksize ist immer eine positive ungerade Zahl. Wenn Sie die Kernelgröße erhöhen, nimmt die Unschärfe zu. Um sigmaX zu verstehen, gehen Sie davon aus, dass Sie Wachs auf ein Papier auftragen. Beim Auftragen von Wachs wird das Papier gleichmäßig durchscheinend. Ebenso müssen Sie die Werte des Kernels nahe an einem bestimmten Punkt (dem Durchschnitt) halten. Der sigmaX-Wert definiert die Differenz zwischen dem Mittelwert und anderen Werten der Pixel in einem Bild.

Übergeben Sie das invertierte Bild, die Kernelgröße als (21, 21) und 0 Standardabweichung an die Gaußsche Unschärfefunktion:

blur = cv2.GaussianBlur(invert, (21, 21), 0)

Übergeben Sie das unscharfe Bild erneut an die Funktion bitwise_not(), um es zu invertieren:

invertedblur = cv2.bitwise_not(blur)

Verwenden Sie schließlich die Funktion divide() und , um eine elementweise Teilung des Graustufenbildarrays und des invertierten Unschärfebildarrays mit einer Skalierung von 256 durchzuführen.

sketch = cv2.divide(grey_img, invertedblur, scale=256.0)

Im Wesentlichen führt die Funktion die folgende Operation aus:

def divide(grey_img, b, invertedblur=256.0):
    return (grey_img * scale) / invertedblur

Speichern Sie das Ergebnis in einer Variablen namens sketch. Um das endgültige Bild zu speichern, übergeben Sie einen Namen für Ihre Ausgabedatei und das Skizzenbild an die Funktion imwrite() . Um dies zu überprüfen, können Sie mit der Funktion imread() das gespeicherte Skizzenbild laden, einen Fenstertitel vergeben und es mit der Funktion imshow() anzeigen.

Verwenden Sie die Funktion waitkey() , indem Sie 0 übergeben, um das ursprüngliche Bildfenster und das generierte Skizzenfenster anzuzeigen, bis Sie eine beliebige Taste drücken.

cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
cv2.waitKey(0)

Bringen Sie den gesamten Code zusammen, und Sie haben Ihr Programm fertig.

Beispielausgabe zum Konvertieren eines Bildes in eine Skizze mit diesem Python-Programm

Sie können ein wunderschönes Landschaftsbild auswählen und es durch das Programm laufen lassen, um diese atemberaubende digitale Skizze zu erstellen.

Bild zum Skizzieren von Haus mit See

Auf einem Porträtbild erzeugt das Programm die folgende digitale Skizze.

Bild, um den Menschen zu skizzieren

Sie können mit den Parametern der Funktion nach Belieben experimentieren, um Ihre gewünschte digitale Skizze zu erstellen.

Bildverarbeitung und Computer Vision

Bildverarbeitung und Computer Vision sind zwei eng verwandte Technologiefelder. Beide beinhalten das Ändern digitaler Bilder, um die gewünschten Ergebnisse zu erzielen. Die Bildverarbeitung konzentriert sich auf die Verbesserung eines Bildes, während Computer Vision versucht, Muster und Objekte in einem Bild zu finden, um es zu verstehen.

Scikit-image ist eine weitere Python-Bibliothek, die eine Vielzahl von Bildverarbeitungsfunktionen bereitstellt. Es verfügt über mehrere vorkompilierte Module, Filter, Ebenen, Transformationen und mehr. Wenn Sie nach einem Modul suchen, das Sie für Deep-Learning-Modelle wie CNN und RNN verwenden können, sollten Sie sich Torchvision ansehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert