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')