In diesem Artikel wird hauptsächlich das Beispiel der Konvertierung von Bildern in Charakterbilder in Python vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Schauen Sie sich den Editor an.
Charaktermalerei ist wirklich interessant, indem die Pixel im Bild durch Zeichen ersetzt werden.
Aber Pixel haben unterschiedliche Farben. Wie kodieren wir Pixel mit unterschiedlichen Farben in entsprechende Zeichen?
Konvertierungsmethode:
Farbbilder in Graustufenbilder umwandeln
Entsprechend der Farbtiefe RGB-Werte (Wertebereich von 0 bis 255, wobei 0 für Schwarz und 255 für Weiß steht)
Einbindung Ihres bevorzugten Zeichensatzes
Entsprechend der Zeichensatzsequenz und Zeichensatzlänge wird der RGB-Wert in das entsprechende Zeichen kodiert.
RGB
Der RGB-Farbmodus basiert auf drei Farbkanälen: Rot (R), Grün (G) und Blau (B). . RGB repräsentiert die Farben der drei Kanäle Rot, Grün und Blau. Dieser Standard umfasst fast alle Farben, die das menschliche Auge wahrnehmen kann.
Normalerweise hat RGB jeweils 256 Helligkeitsstufen, numerisch ausgedrückt von 0, 1, 2 ... bis 255. Beachten Sie, dass obwohl die höchste Zahl 255 ist, 0 auch einer der Werte ist, sodass es insgesamt 256 Ebenen gibt.
Graustufenbild
Graustufenbild bezieht sich auf ein Bild, das nur Helligkeitsinformationen und keine Farbinformationen enthält, genau wie die Schwarzweißfotos, die wir normalerweise sehen: Helligkeit Von dunkel nach hell ist der Wechsel kontinuierlich.
Um ein Graustufenbild darzustellen, muss daher der Helligkeitswert quantisiert werden. Normalerweise ist es in 256 Stufen von 0 bis 255 unterteilt, wobei 0 die dunkelste (vollständig schwarz) und 255 die hellste (vollständig weiß) ist. Bei der Methode zum Ausdrücken von Farben lautet die Umrechnungsformel von RGB in Farbbildern in den Grauwert Grau zusätzlich zu RGB:
#在PIL中,从模式“RGB”转换为“L”模式(灰度模式) Gray = 0.299R+0.587G+0.114B
Zum Beispiel verwenden wir Kleinbuchstaben Englisch 26 Alphabet als unser Zeichensatz. Die Zeichensatzkapazität beträgt 26 (die Wertintervallbreite entspricht einem Zeichen = 256/Zeichensatzlänge)
Die Intervallbreite beträgt hier 256/26=9,8),
Die entsprechende Beziehung zwischen Grau und Zeichensatz:
Grauintervall entsprechende Zeichen
[0.0, 9.8)这|a [9.8, 19.6)|b [19.6, 29.4)|c ...|... [225.6, 235.4]|x [235.4, 245.2]|y [245.2, 255.0]|z
RGB-Konvertierungsfunktion
char_string = 'abcdefghijklmnopqrstuvwxyz' def rgb2char(r, g, b): length = len(char_string) gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) # 每个字符对应的gray值区间宽度 unit = (256.0 + 1) / length # gray值对应到char_string中的位置(索引值) idx = int(gray / unit) return char_string[idx]
Vorverarbeitung
Wenn die Größe zu groß oder zu klein ist, kann die Zeichenzeichnung beim Öffnen des TXT nicht erkannt werden Datei. Daher müssen Sie zunächst die Bildgröße auf die entsprechende Größe anpassen. Beachten Sie hier, dass Sie den Skalierungskoeffizienten-Deltakoeffizienten nach Bedarf ändern können
from PIL import Image #预处理(将图片尺寸压缩,并转为灰度图) def preprocess(img_path,delta=100): img = Image.open(img_path) # 获取图片尺寸 width, height = img.size # 获取图片最大边的长度 if width > height: max = width else: max = height # 伸缩倍数scale scale = max / delta width, height = int(width / scale), int(height / scale) img = img.resize((width, height)) return img
Bild in Zeichen konvertieren
Lesen Sie das Bild Gemäß den Koordinaten erhalten Sie das RGB-Tupel dieses Pixels und werden als Zeichen codiert
def img2char(img_obj, savepath): txt = '' width, height = img_obj.size # 获取像素点的rgb元组值,如(254, 0, 0),并将其转化为字符 for i in range(height): line = '' for j in range(width): line += rgb2char(*img_obj.getpixel((j, i))) txt = txt + line + '\n' # 保存字符画 with open(savepath, 'w+', encoding='utf-8') as f: f.write(txt) img_obj = preprocess(img_path) img2char(img_obj, savepath)
Bild einfügen
Ändern Sie char_string und transformieren Sie den gewünschten Effekt
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie man mit Python Bilder in Charaktergemälde umwandelt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!