OpenCV を利用して、画像にテキストを書き込むには putText メソッドを利用する。putText は 9 個の引数を受け取ることができる。
import cv2 as cv
img = cv.imread('sample.jpg')
cv.putText(img, 'Flowers', (0, 50), cv.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 5, cv.LINE_AA)
cv.imwrite('sample.2.jpg', img)
| 順位 | 引数 | |
| 1 | img | cv.imread で開いた画像オブジェクト。 |
| 2 | text | 書き込む文字列。 |
| 3 | org | 書き込む位置。文字列の左下の角が指定の位置に配置される。 |
| 4 | fontFace | フォントスタイル。CV_FONT_HERSHEY_PLAIN、CV_FONT_HERSHEY_SCRIPT_SIMPLEX などを指定できる。 |
| 5 | fontScale | フォントサイズ。 |
| 6 | color | フォントの色。 |
| 7 | thickness | フォントの太さ。 |
| 8 | lineType | 4、8、cv.LINE_AA のいずれかを指定できる。 |
サンプルコード
写真から撮影時刻を取得し、その時刻を写真に書き込んで保存する。写真から撮影時刻を取得するとき、PIL モジュールの機能を利用する。
import PIL
from PIL import Image
from PIL import ExifTags
import cv2 as cv
def get_exif(image_path):
captured_datetime = None
with Image.open(image_path) as imgfh:
try:
exif = imgfh._getexif()
for attr, val in exif.items():
tag = ExifTags.TAGS.get(attr, attr)
if tag == 'DateTimeOriginal':
captured_datetime = val
except AttributeError:
pass
return captured_datetime
def write_text(image_path):
captured_datetime = get_exif(image_path)
img = cv.imread(image_path)
cv.putText(img, captured_datetime, (10, 30),
cv.FONT_HERSHEY_PLAIN, 1.5,
(255, 255, 255), 1, cv.LINE_AA)
cv.imwrite(image_path + '.new.jpg', img)
if __name__ == '__main__':
write_text('sample.jpg')