OpenCVで描画する文字の大きさを調べるにはgetTextSize()関数を用います。
文字を描画するputText()関数では、文字を描画する位置を文字の左下の位置で指定しますが、文字の位置を上寄せ、下寄せ、右寄せ、左寄せ、左寄せなどを行いたい場合は、描画する文字の領域を調べ、描画位置を補正することで、可能になります。
getTextSizeの構文
getTextSize( text, fontFace, fontScale, thickness ) -> size, baseLine
引数
text | 描画に用いる文字列 |
fontFace | 描画時のフォント cv2.FONT_HERSHEY_SIMPLEX cv2.FONT_HERSHEY_PLAIN cv2.FONT_HERSHEY_DUPLEX cv2.FONT_HERSHEY_COMPLEX cv2.FONT_HERSHEY_TRIPLEX cv2.FONT_HERSHEY_COMPLEX_SMALL cv2.FONT_HERSHEY_SCRIPT_SIMPLEX cv2.FONT_HERSHEY_SCRIPT_COMPLEX cv2.FONT_ITALIC |
fontScale | 文字の大きさの倍率 |
thickness | 線幅を整数で指定します。 |
戻り値
size | 文字の大きさを(幅, 高さ)のタプルで取得します。 |
baseLine | 文字(g, j, p, q, y)の領域から下側にはみ出す量を取得します。 |
サンプルプログラム
import cv2
import numpy as np
img = np.zeros((200, 600, 3), dtype = np.uint8)
text = "abgpqABC123" # 大きさを測る文字列
fontFace = cv2.FONT_HERSHEY_SIMPLEX # フォント
fontScale = 2 # 文字のサイズ
thickness = 1 # 文字の太さ
bottom_left = (50, 100)
# 文字の大きさを測る
size, baseLine = cv2.getTextSize(text, fontFace, fontScale, thickness)
print(size, baseLine ) # 出力結果 -> (431, 43) 18
# putTextで指定した左下の位置
cv2.circle(img, bottom_left, 5, (255, 255, 0), -1)
# getTextSizeで取得した領域
cv2.rectangle(img, bottom_left, (bottom_left[0] + size[0], bottom_left[1] - size[1]), (0, 0, 255), 1)
# baseline(g, j, p, q, yの下側にはみ出す量)
cv2.line(img, (bottom_left[0], bottom_left[1] + baseLine), (bottom_left[0] + size[0], bottom_left[1] + baseLine),
(0, 255, 255), 1)
# 文字の描画
cv2.putText(img, text, bottom_left, fontFace, fontScale, (255, 255, 255), thickness)
cv2.imshow("Image", img)
cv2.waitKey()
実行結果
関連リンク
https://imagingsolution.net/program/python/opencv-python/opencv-reference/opencv-python-puttext/
参照ページ
https://docs.opencv.org/4.8.0/d6/d6e/group__imgproc__draw.html#ga3d2abfcb995fd2db908c8288199dba82