【OpenCV-Python】putText(文字の描画)

OpenCVで画像に文字を描画するにはputText()関数を用います。

ただし、日本語の描画を行うことはできません。

putTextの構文

putText( img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]] ) -> img

引数

img 文字の描画先の画像データ
text 描画する文字列
ただし、日本語には対応していません。
org 文字を描画する位置を文字領域の左下の位置で指定します。
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 文字を大きさの倍率を指定します。
color 線色
カラーの場合は、(B, G, R)の順のタプルで指定します。
thickness 線幅を整数で指定します。
lineType cv2.LINE_4     4連結
cv2.LINE_8     8連結(デフォルト)
cv2.LINE_AA   アンチエイリアス
のいずれかを指定します。
bottomLeftOrigin 画像データの始まりの位置が左下の場合、Trueを指定します。
通常は、画像データの始まりは左上なので、False(初期値)で大丈夫です。

 

戻り値

img 画像データに追加で文字が描画された画像データ(引数で渡した画像と同じデータ)

サンプルプログラム

import cv2
import numpy as np

img = np.zeros((400, 600, 3), dtype = np.uint8)

# Textの描画
img = cv2.putText(img, "abcdefg ABC 123", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255))
# Textの表示位置
img = cv2.circle(img, (10, 40), 5, (0, 0, 255),  -1)

cv2.imshow("Image", img)
cv2.waitKey()

実行結果

 

フォントの種類について

フォントの種類については、全てのフォントを使ったサンプルを作成しましたので、こちらを参照ください。

import cv2
import numpy as np

img = np.zeros((400, 600, 3), dtype = np.uint8)

# Textの描画(Fontごとの描画)
img = cv2.putText(img, "FONT_HERSHEY_SIMPLEX", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_PLAIN", (10, 80), cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_DUPLEX", (10, 120), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_COMPLEX", (10, 160), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_TRIPLEX", (10, 200), cv2.FONT_HERSHEY_TRIPLEX, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_COMPLEX_SMALL", (10, 240), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_SCRIPT_SIMPLEX", (10, 280), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_HERSHEY_SCRIPT_COMPLEX", (10, 320), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 1, (255, 255, 255))
img = cv2.putText(img, "FONT_ITALIC", (10, 360), cv2.FONT_ITALIC, 1, (255, 255, 255))

cv2.imshow("Image", img)
cv2.waitKey()

実行結果

 

その他のオプション設定

putText()関数では、フォントの種類の他に、文字の表示倍率、線色、色、線幅、アンチエイリアス、データの基準位置に関する設定が可能になっています。

こちらについては、それぞれのオプションを設定したサンプルを作成しましたので、合わせてご参照ください。

import cv2
import numpy as np

img = np.zeros((400, 600, 3), dtype = np.uint8)

# 1倍
img = cv2.putText(img, "abcdefg ABC 123", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255))
# 2倍
img = cv2.putText(img, "abcdefg ABC 123", (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 255, 255))

# 文字色を赤
img = cv2.putText(img, "abcdefg ABC 123", (10, 140), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255))
# 線幅を3
img = cv2.putText(img, "abcdefg ABC 123", (10, 180), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 3)
# lineTypeをLINE_AA 
img = cv2.putText(img, "abcdefg ABC 123", (10, 220), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv2.LINE_AA)
# bottomLeftOrigin をTrue
img = cv2.putText(img, "abcdefg ABC 123", (10, 260), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv2.LINE_AA, True)

cv2.imshow("Image", img)
cv2.waitKey()

実行結果

 

関連リンク

https://imagingsolution.net/program/python/opencv-python/opencv-reference/opencv-python-linetypes/

 

参照ページ

https://docs.opencv.org/4.8.0/d6/d6e/group__imgproc__draw.html#ga5126f47f883d730f633d74f07456c576

https://docs.opencv.org/4.8.0/d6/d6e/group__imgproc__draw.html#ga0f9314ea6e35f99bb23f29567fc16e11

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください