概要
Pillowで画像を読み込んでテキストを表示する。ついでにOpenCVでも同じことをしてみる。
バージョン情報
- Pillow==6.0.0
- opencv-python==4.1.0.25
Pillowで画像の読み込みと表示
単純に画像を読み込んで表示だけするコード。
%matplotlib inline import PIL from matplotlib import pylab as plt # 画像の読み込みと表示 img = PIL.Image.open('sample.jpg') plt.imshow(img)
後ろ足かわいい
フォントの確認
テキスト表示をする際に利用するフォントを確認する。
利用可能なフォントを表示するコード。
import matplotlib.font_manager matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf')
当方の環境はUbuntuなので、表示された中からNotoのBoldを使ってみることにする。
'/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc',
Pillowでテキストの追加
フォントを指定してテキストを画像に追加する。
from PIL import ImageDraw, ImageFont # フォントの指定 font = ImageFont.truetype("NotoSerifCJK-Bold.ttc", 96) # 編集用に画像をコピー new_img = img.copy() # コピーした画像にテキストを追加してplot draw = ImageDraw.Draw(new_img) draw.text((20, 50), "dog", (255, 0, 0), font=font) plt.imshow(new_img)
draw.textに指定している引数は順に, 座標, 表示するテキスト, 色, フォント。
実行結果
OpenCVで画像の読み込みと表示
OpenCVでもやってみる。
まずは画像の読み込みと表示。
import cv2 img = cv2.imread('sample.jpg') plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
OpenCVでテキストの追加
フォントを指定してテキストを画像に追加する。OpenCVの場合、RGBではなくBGRになるので赤は(0, 0, 255)になる。
new_img = img.copy() font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(new_img, 'dog', (20, 200), font, 3, (0, 0, 255), 5) plt.imshow(cv2.cvtColor(new_img, cv2.COLOR_BGR2RGB))
putTextの引数は順に、img, text, bottom_leftの座標, font_face, font_scale, color, thickness。
fontで指定できる定数は下記を参照。
上記で指定したフォントだと日本語を表示しようとすると文字化けする。
freetypeを使えばOpenCVでもフォント指定が可能なようだけど、Pillowの方が楽なので割愛。
コード全文
https://github.com/imind-inc/blog/blob/master/notebook/pillow/add_text.ipynb
改定履歴
Author: Masato Watanabe, Date: 2019-08-03, 記事投稿