概要
OpenCV の cv2.putText()
を使用して画像にテキストを描画する方法について解説します。
また、Pillow を使用して日本語のテキストを描画する方法についても記載しています。
cv2.putText
公式リファレンス: cv2.putText
引数
名前 | 型 | デフォルト値 |
---|---|---|
img | ndarray | |
入力画像 | ||
text | str | |
文字列 | ||
org | tuple of 2 ints | |
描画位置 (baseline の始点) | ||
fontFace | int | |
フォントの種類 | ||
fontScale | float | |
フォントの倍率 | ||
color | int / tuple of ints | |
色 | ||
thickness | int | 1 |
文字の太さ | ||
line_type | LineTypes | cv2.LINE_8 |
線の描画方法 | ||
bottomLeftOrigin | bool | False |
True の場合、左下を原点として扱う |
返り値
名前 | 説明 | ||
---|---|---|---|
img | 出力画像 |
注意点として、日本語などの Ascii 文字以外は描画できないため、そのような文字を描画したい場合は Pillow を使います。
lineType=cv2.LINE_AA
を指定すると、アンチエイリアスが有効になり、文字のジャギーが軽減します。
- 色は
color
で指定します。1 チャンネル画像の場合はint
、3 チャンネル画像の場合は(int, int, int)
で指定します。(例:color=(255, 0, 0)
) - 線の太さは
thickness
で指定します。負の値を指定した場合は塗りつぶしになります。 - 描画は引数に渡した配列を直接変更します。
- 点の座標や大きさは
float
ではなく、int
で指定します。
In [1]:
In [2]:
テキストの大きさを取得する
公式リファレンス: cv2.getTextSize
引数
名前 | 型 | デフォルト値 |
---|---|---|
text | str | |
文字列 | ||
fontFace | int | |
フォントの種類 | ||
fontScale | float | |
フォントの倍率 | ||
thickness | int | 1 |
文字の太さ |
返り値
名前 | 説明 | ||
---|---|---|---|
(w, h) | 文字の大きさ | ||
baseLine | ベースラインまでの距離 |
引数の解釈は以下のようになっています。
文字を囲む矩形とベースラインを描画する例を紹介します。
In [3]:
size: (176, 22), baseline: 10
また、cv2.getTextSize()
で指定した丁度収まる fontScale の値を取得できます。
公式リファレンス: cv2.getFontScaleFromHeight
引数
名前 | 型 | デフォルト値 |
---|---|---|
fontFace | int | |
フォントの種類 | ||
pixelHeight | int | |
高さ | ||
thickness | int | 1 |
文字の太さ |
返り値
名前 | 説明 | ||
---|---|---|---|
fontFace | フォントの倍率 |
In [4]:
size: (159, 20), baseline: 9
日本語のテキストを描画する
cv2.putText()
は簡単にテキストの描画が行えますが、以下の欠点があります。
- 日本語が描画できない
- フォントの種類が用意されたもの以外選択できない
In [5]:
そのため、日本語を描画したい場合、Pillow のテキストを描画する関数を使用することをおすすめします。
In [6]:
text size: (90, 29)
コメント