画像処理において、画像上にテキスト情報を描画したい場面は多くあります。 例えば、検出結果のラベルを重ねたり、画像にキャプションを追加したりするケースです。
この記事では、OpenCVのcv2.putText()を使って画像に文字を描画する方法を解説します。
目次
事前準備
以下のコードで画像の読み込みとリサイズを行います。
import cv2
path = "input/fox.jpg"
img = cv2.imread(path)
height, width = img.shape[:2]
# 画像のリサイズ(1/4に)
img = cv2.resize(img, (round(width / 4), round(height / 4)))文字を描画する(cv2.putText())
文字の描画にはcv2.putText()を使用します。
構文
cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])サンプルコード
imageText = img.copy()
text = 'Sample text is here!'
# 始点の座標
org = (50, 350)
cv2.putText(imageText, text, org, fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1.5, color=(250, 225, 0))
cv2.imshow("Image Text", imageText)
cv2.waitKey(0)
引数
colorまでが必須の引数です。それ以降は必要に応じて指定します。
| 引数 | 説明 |
|---|---|
| text | 表示する文字列 |
| org | 文字列の左下端の座標(表示の開始位置) |
| fontFace | フォントの種類 |
| fontScale | 文字のサイズ(倍率) |
| color | 文字の色(BGR形式) |
| thickness | 文字の線の太さ |
| bottomLeftOrigin | Trueの場合、画像の原点が左下。Falseの場合(デフォルト)、画像の原点が左上 |
fontFace(フォントの種類)
OpenCVではHersheyフォントと呼ばれる9種類のフォントが使用できます。
| フォント | 説明 |
|---|---|
cv2.FONT_HERSHEY_SIMPLEX | sans-serif(通常サイズ) |
cv2.FONT_HERSHEY_PLAIN | sans-serif(小サイズ) |
cv2.FONT_HERSHEY_DUPLEX | sans-serif(通常サイズ)※SIMPLEXより複雑 |
cv2.FONT_HERSHEY_COMPLEX | serif(通常サイズ) |
cv2.FONT_HERSHEY_TRIPLEX | serif(通常サイズ)※COMPLEXより複雑 |
cv2.FONT_HERSHEY_COMPLEX_SMALL | serif(小サイズ) |
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX | 手書きフォント |
cv2.FONT_HERSHEY_SCRIPT_COMPLEX | 手書きフォント(複雑版) |
cv2.FONT_ITALIC | イタリック体 |
各フォントの見た目は以下の通りです。

注意: OpenCV単体では日本語の文字を表示することができません。日本語を表示するにはPillowなど他のパッケージと組み合わせる必要があります。
fontScale(文字サイズの倍率)
fontScaleは文字のスケール(拡大倍率)を指定するパラメータです。
- 1以上: 文字が拡大される
- 0より大きく1未満: 文字が縮小される
- 0以下: 文字が上下左右に反転する
cv2.putText(imageText, 'FONT_HERSHEY_COMPLEX', (10, 40), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1, color=(250, 225, 0))
cv2.putText(imageText, 'FONT_HERSHEY_COMPLEX', (10, 80), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1.5, color=(250, 225, 0))
cv2.putText(imageText, 'FONT_HERSHEY_COMPLEX', (10, 120), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=0.5, color=(250, 225, 0))
cv2.putText(imageText, 'FONT_HERSHEY_COMPLEX', (450, 160), fontFace=cv2.FONT_HERSHEY_TRIPLEX, fontScale=-1, color=(250, 225, 0))
fontScaleに0以下を指定すると、文字が上下左右に反転して表示されることがわかります。
bottomLeftOrigin(原点の位置)
OpenCVでは通常、画像の原点は左上に設定されています。bottomLeftOriginをTrueに設定すると、原点が左下に変更されます。

デフォルト(False)では原点が左上なので、通常はこの引数を指定する必要はありません。座標系を変更したい特殊なケースでのみ使用します。
まとめ
今回は、OpenCVで画像に文字を描画する方法を紹介しました。
- 文字の描画には
cv2.putText()を使用する - 9種類のHersheyフォントが利用可能
fontScaleで文字サイズの倍率を指定できる- OpenCV単体では日本語表示に非対応(Pillowとの組み合わせが必要)