PythonとOpenCVを使用して画像のEXIFデータを操作する方法について説明します。
OpenCVとEXIFデータ
OpenCVのimread
関数は、JPEG画像を読み込む際に、EXIFのOrientationタグを見て自動的に補正して読み込む。しかし、OpenCV自体にはEXIFデータを操作する機能がありません。
Pillowを使用したEXIFデータの操作
EXIFデータの操作には、Pillowライブラリを使用することが一般的です。PillowのImage.open
関数を使用して画像を開き、info["exif"]
でEXIF情報を取得できます。
from PIL import Image
img = Image.open(fname)
exif = img.info["exif"] # exif情報取得
EXIFデータのコピー
OpenCVで画像処理を行った後、Pillowを使用して元の画像からEXIFデータをコピーし、新しい画像に保存することができます。
import cv2
from PIL import Image
img = cv2.imread(fname)
out = process(img) # 何かの処理
image = Image.open(fname)
exif = image.info["exif"] # exif情報取得
# 処理済みの画像にEXIFをコピーして保存
Image.fromarray(out).save(output, "JPEG", exif=exif)
ただし、この方法ではOrientationのタグがそのままコピーされるため、OpenCVが自動補正した画像の向きとEXIFのOrientationが一致しない場合があります。そのため、適切な向きで画像を表示するためには、EXIFデータのOrientationを適切に設定する必要があります。
まとめ
PythonとOpenCVを使用して画像を処理する際には、EXIFデータの扱いに注意が必要です。OpenCVはEXIFのOrientationタグを自動的に補正しますが、EXIFデータ自体を操作する機能は提供していません。そのため、EXIFデータを操作するためには別のライブラリ(例えばPillow)を使用する必要があります。