Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln

Einführung

Neulich fand ich eine interessante Seite namens ASCII Camera. picture_pc_3c309a4cbd82ecc52c545a04da630a0b.png Auf diese Weise wird das Kamerabild vom Browser abgerufen und in eine ASCII-Zeichenfolge konvertiert.

Ich dachte, ich könnte es selbst machen, also beschloss ich, ein Programm zu erstellen, um das Bild in ASCII-Kunst umzuwandeln.

Wie es funktioniert

Der Mechanismus ist wie folgt.

  1. Konvertieren Sie das Bild in Graustufen
  2. Ermitteln Sie die Farbintensität jedes Pixels und bestimmen Sie den Text entsprechend
  3. Brechen Sie jede Spalte

Python und OpenCV machen diese Dinge ziemlich einfach.

In Graustufen konvertieren

Der Pfad des zu lesenden Bildes sollte durch Eingabe erhalten werden. Dadurch wird es in Graustufen umgewandelt und das Grau enthält die Dichte (0-255) für jedes Pixel.

import cv2

imgpath = input("Path: ")
img = cv2.imread(imgpath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Bestimmen Sie ASCII-Zeichen

Sie müssen die ASCII-Zeichen für jede Pixeldichte (0-255) ermitteln, es sind jedoch nicht 256 tatsächliche ASCII-Zeichen verfügbar. Ich konnte nicht anders, also wählte ich sorgfältig 64 Zeichen aus und entschied mich, die Zeichen auszuwählen, indem ich die Dichte in 4 Teile teilte. Wenn die Dichte beispielsweise 0 bis 3 beträgt, ist sie "M", wenn sie 252 bis 255 beträgt, ist sie "(leer)" und so weiter.

Unten sind 64 Zeichen in der Reihenfolge "hohe Dichte" angeordnet.

MWN$@%#&B89EGA6mK5HRkbYT43V0JL7gpaseyxznocv?jIftr1li*=-~^`':;,. 

Es war ziemlich schwierig, diese Reihenfolge zu bestimmen. Die Reihenfolge wird nur durch das Aussehen entschieden, so ist es super geeignet.

Der Konvertierungsprozess sieht folgendermaßen aus.


colorset = "MWN$@%#&B89EGA6mK5HRkbYT43V0JL7gpaseyxznocv?jIftr1li*=-~^`':;,. "

for gray2 in gray:
    output += "\n"
    for dark in gray2:
        output += colorset[dark // 4] * 2

Sie können den Farbsatzindex genau richtig erhalten, indem Sie die Dichte durch 4 teilen und abschneiden. Da das Seitenverhältnis von ASCII-Zeichen 2: 1 beträgt, werden die zu schreibenden Zeichen verdoppelt.

Komplett

Das abgeschlossene Programm sieht so aus. Das Ergebnis wird in eine Datei ausgegeben.

import cv2

colorset = "MWN$@%#&B89EGA6mK5HRkbYT43V0JL7gpaseyxznocv?jIftr1li*=-~^`':;,. "

imgpath = input("Path:")
img = cv2.imread(imgpath)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
output = ""

for gray2 in gray:
    output += "\n"
    for dark in gray2:
        output += colorset[dark // 4] * 2

with open("output.txt", mode="w") as f:
    f.write(output)

Ich werde versuchen, mein Symbol zu konvertieren (dies ↓). nico.png Ergebnis ist ...

スクリーンショット (148).png

So was. Ich war überrascht, dass ich es richtig konvertieren konnte.

Als nächstes werde ich ein kostenloses Bild der natürlichen Landschaft von Nordengland versuchen, das von Herrn Pakutaso erhalten wurde und auf 300 x 200 Pixel konvertiert wurde. elly20160701265118_TP_V.jpg Ergebnis ist ...

スクリーンショット (146).png Ja ... ich denke es ist eine gute Linie.

Schließlich habe ich es von Diese Person existiert nicht erhalten, einer Site, auf der AI automatisch Gesichtsfotos generiert. image.jpg Lassen Sie uns dieses Bild in 250x250px konvertieren und ausführen.

Ergebnis ist ...

スクリーンショット (147).png Es fühlt sich ziemlich gut an! Das ist gut ... die Mühe hat sich gelohnt ...

abschließend

So war es mit nur 12 Codezeilen möglich. Diesmal habe ich OpenCV zum ersten Mal berührt, aber ich fand es nicht so praktisch. Es könnte interessant sein, dasselbe in Unicode mit 256 Zeichen zu versuchen.

Verweise

Recommended Posts

Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe ein Netzwerk erstellt, um Schwarzweißbilder in Farbbilder umzuwandeln (pix2pix)
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe mit Python eine Lotterie gemacht.
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Konvertieren Sie das an Jason Stay Samlike in Python übergebene Bild in ASCII Art
Konvertieren Sie Videos mit ffmpeg + python + opencv in Schwarzweiß
Ich habe mit Python einen Daemon erstellt
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python einen Zeichenzähler erstellt
Bilder mit Pupil, Python und OpenCV aufnehmen
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe ein CLI-Tool erstellt, um Bilder in jedem Verzeichnis in PDF zu konvertieren
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich habe ein Programm erstellt, um einzugeben, was ich gegessen habe, und um Kalorien und Zucker anzuzeigen
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Konvertieren Sie PDFs mit Python in Massenbilder
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Ich möchte ein Spiel mit Python machen
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich möchte mit Python in eine Datei schreiben
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Einführung in die KI-Erstellung mit Python! Teil 3 Ich habe versucht, Bilder mit einem Convolutional Neural Network (CNN) zu klassifizieren und vorherzusagen.
Ich habe versucht, mit Python viele Bilder wie das Favicon des Google-Kalenders zu generieren und in Vues Projekt zu integrieren
Ich habe in Python ein Programm erstellt, das FX-CSV-Daten liest und eine große Anzahl von Diagrammbildern erstellt
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt