この記事ではPythonで写真をキャラクター絵に変換する例を中心に紹介していますが、編集者がとても良いと思ったので、参考として共有させていただきます。エディターをフォローして見てみましょう
キャラクターペイントは、絵の中のピクセルをキャラクターに置き換えることによって生成されるので、とても興味深いです。
しかし、ピクセルにはさまざまな色があります。異なる色のピクセルを対応する文字にエンコードするにはどうすればよいでしょうか?
変換方法:
カラー画像をグレースケール画像に変換します
色深度のRGB値に従って(値の範囲は0から255で、0は黒、255は白です)
お気に入りの文字セットを使用
文字セットの順序と文字セットの長さに従って、RGB 値が対応する文字にエンコードされます。
RGB
RGBカラーモードは、赤(R)、緑(G)、青(B)の3つのカラーチャンネルを変更し、それらを重ね合わせることで様々な色を取得します。赤、緑、青の 3 つのチャネルの色。この規格には人間の視覚で認識できるほぼすべての色が含まれます。
通常、RGB にはそれぞれ 256 レベルの明るさがあり、0、1、2... から 255 までの数値で表されます。最大値は 255 ですが、0 も値の 1 つであるため、合計 256 のレベルがあることに注意してください。
グレースケール画像
グレースケール画像とは、私たちが普段目にする白黒写真と同じように、明るさの情報のみを含み、色の情報を含まない画像を指します。明るさが暗いところから明るいところまで連続的に変化します。
したがって、グレースケール画像を表現するには、輝度値を量子化する必要があります。通常は 0 ~ 255 の 256 レベルに分割され、0 が最も暗く (完全に黒)、255 が最も明るい (完全に白) になります。色の表現方法では、RGB に加えて、カラー写真の RGB からグレー値 Gray への変換式は次のとおりです。
#在PIL中,从模式“RGB”转换为“L”模式(灰度模式) Gray = 0.299R+0.587G+0.114B
たとえば、文字セットとして 26 個の小文字の英字を使用します。文字セットの容量は 26 (1 文字に対応する値の間隔幅 = 256 / 文字セットの長さ)
ここでの間隔幅は 256/26=9.8)、
gray と文字セットの対応関係:
グレー区間対応文字
[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文字変換機能
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]
前処理
サイズが大きすぎたり小さすぎたりすると、テキストを開いたときに文字の塗りが認識できなくなりますファイル。したがって、最初に画像サイズを適切なサイズに調整する必要があります。ここで、必要に応じてスケーリング係数デルタ係数を変更できることに注意してください
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
画像を文字に
画像を読み取り、座標に従ってピクセルのRGBタプルを取得し、文字としてエンコードします
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)
画像を挿入
char_string を変更して、必要な効果を変換します
以上がPythonを使って画像をキャラ絵に変換する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。