KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
OpenCVで使われるgetTextSizeとは?図解を交えながら徹底解説!?

OpenCVで使われるgetTextSizeとは?図解を交えながら徹底解説!?

今回はOpenCVで使われるgetTextSizeに関して、図解を交えながらわかりやすく解説致します。getTextSize関数を活用したい、OpenCVを使い始めた方へおすすめです。ぜひ最後までご覧ください。

目次
  1. OpenCVで使われるgetTextSizeとは?
  2. OpenCVで使われるgetTextSize関数の定義
  3. まとめ
  4. 参考文献

執筆者 - おすすめの記事3選

OpenCVで使われるgetTextSizeとは?

OpenCVで使われるgetTextSizeとは、画像内へ印字する文字列の、幅や高さ・ベースラインを取得できる関数を意味します。

【ベースラインのイメージ画像】

  1. ある文字列が画像内で印字されていると仮定します。(以下画像では、AJEの文字列)
  2. 行を調べます。一番上の行から探索します。ある行に対して、各文字の画素が印字されているか調べます。
  3. 1つ下の行へ移動して2を繰り返します。
  4. 「ある行に対して、各文字の画素が印字されているか」を満たす、最終行を選択します。その最終行から一番下までの長さを、ベースラインと呼ぶ。

具体的なイメージとしては、以下の「getTextSize関数のイメージ画像」の水色で説明される箇所を、イメージしてもらうと良いでしょう。

【getTextSize関数のイメージ画像】

getTextSize関数は、画像内へ文字列を印字する周りへ、装飾を加えたい場合によく利用されます。

OpenCVで使われるgetTextSize関数の定義

getTextSize関数は

1# cv2(OpenCV)を利用する宣言を行う。
2import cv2
3
4# getTextSize : 画像内へ印字する文字列の、幅や高さ・ベースラインを取得できる関数
5# getTextSize関数 - 公式ドキュメント : https://docs.opencv.org/3.4.0/d6/d6e/group__imgproc__draw.html#ga3d2abfcb995fd2db908c8288199dba82
6
7# 第一引数(必須) : 画像内へ印字する文字列
8
9# 第二引数(必須) : 画像内へ印字する文字列の、フォントの種類を指定します。フォントの種類に関しては、以下の公式ドキュメントをご確認ください。
10# 公式ドキュメント : https://docs.opencv.org/3.4.0/d0/de1/group__core.html#ga0f9314ea6e35f99bb23f29567fc16e11
11# 例) cv.FONT_HERSHEY_SIMPLEX : 文字サイズを普通にして、sans-serifフォントを利用する。
12# sans-serifとは? : https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%B3%E3%82%BB%E3%83%AA%E3%83%95
13# フォントとは? : https://www.weblio.jp/content/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88
14
15###############################
16# 第三引数(必須) : 画像内へ印字する文字列の大きさを、倍率指定する。float型。
17# ※ 負の数字を設定すると、画像内へ印字する文字列を反転 かつ 大きさを変更します。
18# 例) 1.2 : 画像内へ印字する文字列の大きさを、元の文字列の1.2倍の大きさに変更する。
19###############################
20
21###############################
22# 第四引数(必須) : 画像内へ印字する文字列の太さを指定します。int型。
23###############################
24
25# 戻り値 ###############################
26# w : 文字列の幅
27# h : 文字列の高さ
28# baseline : ベースライン
29#####################################
30
31(w, h), baseline = cv2.getTextSize(text, (cv.FONT_HERSHEY_SIMPLEX, cv.FONT_HERSHEY_PLAIN, cv.FONT_HERSHEY_DUPLEX, cv.FONT_HERSHEY_COMPLEX, cv.FONT_HERSHEY_TRIPLEX, cv.FONT_HERSHEY_COMPLEX_SMALL, cv.FONT_HERSHEY_SCRIPT_SIMPLEX, cv.FONT_HERSHEY_SCRIPT_COMPLEX, cv.FONT_ITALIC)のどれか, 数字, 整数)

で定義されます。

例えば以下のようなコードを作成すると、

1import cv2
2import sys
3
4# imread : 画像ファイルを読み込んで、多次元配列(numpy.ndarray)にする。
5# imreadについて : https://kuroro.blog/python/wqh9VIEmRXS4ZAA7C4wd/
6# 第一引数 : 画像のファイルパス
7# 戻り値 : 行 x 列 x 色の三次元配列(numpy.ndarray)が返される。
8img = cv2.imread('xxx.xxx')
9
10# 画像ファイルが正常に読み込めなかった場合、プログラムを終了する。
11if img is None:
12    sys.exit("Could not read the image.")
13
14# 画像内へ印字する文字列
15text = "Hello World"
16# 画像内へ印字する文字列のフォントの種類
17fontface = cv2.FONT_HERSHEY_SIMPLEX
18# 画像内へ印字する文字列の大きさ。倍率指定。
19fontscale = 2.0
20# 画像内へ印字する文字列の太さ
21thickness = 2
22# 画像内へ印字する文字列を、画像のどの位置へ挿入するのか指定する。
23x, y = 200, 200
24
25# getTextSize : 画像内へ印字する文字列の、幅や高さ・ベースラインを取得できる関数
26
27# 第一引数(必須) : 画像内へ印字する文字列
28# 第二引数(必須) : 画像内へ印字する文字列の、フォントの種類を指定します。
29# 第三引数(必須) : 画像内へ印字する文字列の大きさを、倍率指定する。float型。
30# 第四引数(必須) : 画像内へ印字する文字列の太さを指定します。int型。
31
32# 戻り値 ###############################
33# w : 文字列の幅
34# h : 文字列の高さ
35# baseline : ベースライン
36#####################################
37(w, h), baseline = cv2.getTextSize(text, fontface, fontscale, thickness)
38
39# 画像内へ文字列を印字する。
40# puttext関数について : https://kuroro.blog/python/Omz54Dk1uR1d23yNow7e/
41cv2.putText(img, text, (x, y), fontface, fontscale, (255, 255, 255), thickness)
42
43# 画像内へ印字する文字列の周りへ、矩形を挿入する。
44# rectangle関数について : https://kuroro.blog/python/ueVXVWPVfEmknnz6C8U1/
45cv2.rectangle(img, (x, y), (x + w, y - h), (0, 0, 255), thickness)
46
47# imwrite : 画像の保存を行う関数
48# 第一引数 : 保存先の画像ファイル名
49# 第二引数 : 多次元配列(numpy.ndarray)
50# <第二引数の例>
51# [
52# [
53# [234 237 228]
54# ...
55# [202 209 194]
56# ]
57# [
58# [10 27 16]
59# ...
60# [36 67 46]
61# ]
62# [
63# [34 51 40]
64# ...
65# [50 81 60]
66# ]
67# ]
68# imwriteについて : https://kuroro.blog/python/i0tNE1Mp8aEz8Z7n6Ggg/
69cv2.imwrite('output.jpg', img)

以下の画像のように、画像が描画されます。

imreadに関しては、OpenCVで使われるimreadとは?使い方から配列が画像になる仕組みを解説でまとめていますので、詳しく知りたい方は是非ご確認ください。

puttextに関しては、OpenCVで使われるputtextとは?コードを交えて徹底解説!?でまとめていますので、詳しく知りたい方は是非ご確認ください。

rectangleに関しては、OpenCVで使われるrectangleとは?各引数の意味をわかりやすく解説!?でまとめていますので、詳しく知りたい方は是非ご確認ください。

imwriteに関しては、OpenCVで使われるimwriteとは?imwriteの定義から使用例をご紹介でまとめていますので、詳しく知りたい方は是非ご確認ください。

まとめ

  • OpenCVで使われるgetTextSizeとは、画像内へ印字する文字列の、幅や高さ・ベースラインを取得するための関数である。
  • getTextSize関数は、画像内へ文字列を印字する周りへ、装飾を加えたい場合によく利用されます。

参考文献

記事に関するお問い合わせ