OpenCV、RGBがBGRになったりパスに日本語使えないとか変なとこありますが、日本語テキストもcv2.putTextで表示できません。
表示しようとする「?????」という表記になってしまいます。
PILで日本語テキスト表示
まずはPILのインストール。
pip install pillow
日本語表示はこんな感じでやればいけます。
フォントはOSそれぞれでパスが異なります。申し訳ないですが、手元にWindowsしかないので他は全部拾い物のパス使ってます。まともに動くかわかりません。
注意点はImageDrawの扱いくらいでしょうか。
ImageDrawはPIL.Imageを受け取り、draw.textは受け取ったPIL.Imageに直接書き込みます。
元のものに書き込みされるので、残しておきたいならcopyなどしておく必要があります。
import numpy as np
import cv2
import platform
from PIL import Image, ImageDraw, ImageFont
image = cv2.imread(<画像ファイルパス>)
text = "テストABCabc1234$"
text_x, text_y = 100, 100 # テキスト表示する左上の座標
font_size = 14
text_color = (0, 0, 255) # 赤文字, 元がOpenCV画像のためBGR表記
pil_image = Image.fromarray(image)
draw = ImageDraw.Draw(pil_image)
# OSごとにパスが異なる
font_path_dict = {
# この例だとメイリオを使用. ほかのフォントにも当然変更できる
"Windows": "C:/Windows/Fonts/meiryo.ttc",
# Windows以外拾い物で動作確認できてないので間違ってるかもしれません
"Darwin": "/System/Library/Fonts/Courier.dfont", # Mac
"Linux": "/usr/share/fonts/OTF/TakaoPMincho.ttf"
}
font_path = font_path_dict.get(platform.system())
if font_path is None:
assert False, "想定してないOS"
draw.font = ImageFont.truetype(font_path, font_size) # font設定
draw.text((text_x, text_y), text, text_color) # pil_imageに直接書き込み
result_image = np.array(pil_image) # OpenCV/numpy形式に変換
# 画像表示
cv2.imshow("test", result_image)
cv2.waitKey()