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.
Einige der beliebtesten Anwendungen von OpenCV beinhaltet Gesichtserkennung, automatische Gesichtsverfolgung in der Kinematographie, Social-Media-Filter, Kfz-Kennzeichenerkennung, und CCTV-Überwachung. Um das OpenCV-Modul in Python zu verwenden, öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:
pip installiere 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.
Dieser Beispielcode ist verfügbar in a GitHub-Repository und steht Ihnen unter der MIT-Lizenz kostenlos zur Verfügung.
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 imgelesen() Funktion zum Laden. Speichern Sie Ihr Bild in einer Variablen namens Bild1 hier – zum späteren Nachschlagen.
Speichern Sie den Titel des Fensters in einer Variablen namens Fenstername. Dies ist nützlich, wenn Sie das Bild mithilfe von anzeigen möchten imshow() Funktion. Diese Funktion erfordert zwei Parameter: den Titel und das anzuzeigende Bild.
importieren Lebenslauf2
image1 = cv2.imread('bild.jpg')
Fenstername = 'Tatsächliches Bild'
cv2.imshow (Fenstername, Bild1)
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 dem tun cvtColor() Funktion. Diese Funktion übernimmt das Bild, dessen Farben Sie ändern möchten, und einen Konvertierungscode wie z COLOR_BGR2GRAU.
grey_img = cv2.cvtColor (Bild1, 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 erstellt. 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, sodass die Intensität eines Pixels zwischen 0 und 1 variiert. Um die Pixelintensitäten dieses Bildes umzukehren, übergeben Sie das Graustufenbild an die bitweise_nicht() Funktion.
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.
OpenCVs Gaußscher Weichzeichner() Die Funktion 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.GaußianBlur (umkehren, (21, 21), 0)
Übergeben Sie das unscharfe Bild erneut an die Funktion bitwise_not(), um es zu invertieren:
invertedblur = cv2.bitwise_not (Unschärfe)
Verwenden Sie schließlich die teilen() Funktion und zum Durchführen einer elementweisen Teilung des Graustufenbildarrays und des invertierten Unschärfebildarrays mit einer Skalierung von 256.
sketch = cv2.divide (grey_img, invertedblur, scale=256.0)
Im Wesentlichen führt die Funktion die folgende Operation aus:
defteilen(grey_img, b, invertedblur=256.0):
zurückkehren (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 schreiben() Funktion. 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 Wartetaste () Funktion, indem Sie 0 übergeben, um das ursprüngliche Bildfenster und das generierte Skizzenfenster anzuzeigen, bis Sie eine beliebige Taste drücken.
cv2.imwrite("Skizze.jpeg", Skizze)
image = cv2.imread("Skizze.jpeg")
Fenstername ='Bild skizzieren'
cv2.imshow (Fenstername, Bild)
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.
Auf einem Porträtbild erzeugt das Programm die folgende digitale Skizze.
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.