Ausführliche Erklärung, wie man mit Python Bilder in Charaktergemälde umwandelt

黄舟
Freigeben: 2017-08-22 13:24:34
Original
2687 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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]
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage