初めに
rawpyとはカメラの現像を解析するpythonのパッケージです。そもそもc++のlibrawと同じものです。画像処理にはpythonでよく使うので、librawをpythonで利用できるため、rawpyを使うのはlibrawと同じ効果を貰える。
以下はraw現像の解析、やmeta-dataを獲得の方法少し紹介したいと思います。
rawからjpgに転換
- python環境にインストール
$ pip install rawpy
- コードに使用
import rawpy # インポート
import cv2
import os
path="X:\\photo_test" # 現像のディレクトリとファイル名
raw_name_sony = "sony.ARW"
output_name= "output.JPG"
raw = rawpy.imread(os.path.join(path,raw_name_sony)) #現像入力
decoded = raw.postprocess()[:, :, [2, 1, 0]]
cv2.imwrite(os.path.join(path,output_name),decoded) # opencvでjpgを出力
rawpyで画像転換機能は使いやすいですが、postprocess
には沢山のパラメータを提供されて、実際使用した時、自分の需要によって、パラメータを入力します。
以下はキャンプ工学さんからのパラメータ説明です:
こちら
注意点
-
rawのサイズは出力のjpgサイズと不一致の場合はあるかもしれません。その原因はカメラの設定された比率はcmosのサイズと違い場合、カメラやパソコンの写真ビューワは一部のピクセル自動的にマスクされました。でも、rawに隠されたピクセルは保存しているので、
postprocess
で全部出力されることです。 -
rawpyで出力されたjpgとカメラ出力のjpgは不一致あるかもしれません。その原因の一つはカメラに設定したwhitebalanceやgammaなど
postprocess
との設定異なることです。デフォルトでrawを出力したら、正常に見た写真より暗いです。whitebalanceをfalseと設定すると、出力の写真は暗いです。
写真meta-dataの出力
写真にカメラ設定パラメータなどいろんな情報がありますので、pillowでmeta-data出力が出来ます。pillowはrawを入力できなので、カメラ出力のjpgでmeta-dataあるいはexifを獲得出来ます。
- pillow をインストール
pip install pillow
- pillowの導入
from PIL import Image
from PIL.ExifTags import TAGS
- exifを抽出、dictに記録
im = Image.open("X:\\photo_test\\DSC00406.JPG")
exif = im._getexif()
exif_table = {}
for tag_id, value in exif.items():
tag = TAGS.get(tag_id, tag_id)
exif_table[tag] = value
for i in exif_table:
print(i,"----->",exif_table[i])
注意点
画像のexifは失った場合もあります。トリミングやフォーマット転換してから再保存する時はexifの情報はピクセルと共に保存されていないことです。