自己紹介
株式会社digitalbigmoのパイプラインエンジニアの小池@plinecomです。
これは何?
OpenEXRに、3DLUTファイルを当てたくなる。それ、OpenImageIO(OIIO)でも出来るんです。OpenImageIOにOpenColorIO(OCIO)の機能が一部含まれているので、3DLutを適用した画像を作れる。そのやり方を示す。
とりあえず、コード
main.py
import OpenImageIO as oiio
import glob
if __name__ == '__main__':
for path in glob.glob('/foo/bar/*.exr'):
print(path)
jpg_path = path.replace('.exr', '_lut.jpg')
#Read File
buf = oiio.ImageBuf(path)
#Apply Lut File
dst = oiio.ImageBuf()
isOK = oiio.ImageBufAlgo.ociofiletransform(dst, buf,
"/foo/bar/test.cube",
False)
if not isOK:
print("ociofiletransform error: " + dst.geterror())
continue
#Write File
dst.write(jpg_path)
必要なPython外部モジュール
- OpenImageIO
- NumPy
Dockerfileも用意した。
Dockerfile
FROM rockylinux:8
RUN dnf install -y which python3 epel-release
RUN dnf config-manager --set-enabled powertools
RUN dnf install -y python3-openimageio python3-numpy
terminal
docker pull plinecom/py_oiio
コードの説明
Lutの適用の指示
dst = oiio.ImageBuf()
isOK = oiio.ImageBufAlgo.ociofiletransform(dst, buf,
"/foo/bar/test.cube",
False)
dstな仮バッファを用意して、そちらにtest.cubeのLutファイルを適用している。最後のFalseは逆変換であることを示す。
if not isOK:
print("ociofiletransform error: " + dst.geterror())
continue
エラーハンドリング。このociofiletransform()関数は受け入れてくれるLutファイルの形式の制限が厳しいので、なんで通らなかったのかエラーハンドリングして、エラー内容を出力させる。こうすることで、何が問題なのか解決の手がかりとなる。
宣伝
株式会社digitalbigmoでは美肌プラグインの販売や映像VFXの制作業務を行なっています。ご興味のある方は、webページを見にきてください。一緒にお仕事しましょう。