2017-08-29 20 views
3

与えられた文字をnumpy配列にレンダリングする簡単な方法があるかどうか尋ねます。私が望むのは、文字を入力として受け取り、plt.imshow()関数の引数として使用できるnumpy配列を返す関数です。それは簡単な仕事のように思える、多くの依存関係を必要とする解決策の2つを除けば、カンツは実際にインターネット上でそれを見つけます。ユニコード/アスキー文字をnumpy配列にレンダリング

+0

を私はこれを行うには、既製の方法を知っていませんが、私の提案は見つけることであろうアスキー文字のいくつかの画像は、 'scikit-image'を使ってバイナリ(閾値処理)に変換してからnumpy配列を自動的に取得します。 –

答えて

1

ODLにはtext_phantomがあり、これはいくつかの鐘や笛で正確に行われます。

簡略化された実装を提供するために、PILライブラリを使用できます。具体的には、イメージサイズとフォントサイズを決定する必要がありますが、それはやや簡単です。

from PIL import Image, ImageDraw, ImageFont 
import numpy as np 

def text_phantom(text, size): 
    # Availability is platform dependent 
    font = 'arial' 

    # Create font 
    pil_font = ImageFont.truetype(font + ".ttf", size=size // len(text), 
            encoding="unic") 
    text_width, text_height = pil_font.getsize(text) 

    # create a blank canvas with extra space between lines 
    canvas = Image.new('RGB', [size, size], (255, 255, 255)) 

    # draw the text onto the canvas 
    draw = ImageDraw.Draw(canvas) 
    offset = ((size - text_width) // 2, 
       (size - text_height) // 2) 
    white = "#000000" 
    draw.text(offset, text, font=pil_font, fill=white) 

    # Convert the canvas into an array with values in [0, 1] 
    return (255 - np.asarray(canvas))/255.0 

これは、例えば、与え:

import matplotlib.pyplot as plt 
plt.imshow(text_phantom('A', [100, 100])) 
plt.imshow(text_phantom('Longer text', 100)) 

enter image description here enter image description here

関連する問題