LoginSignup
0
0

More than 1 year has passed since last update.

PythonでOpenImageIO(OIIO)を使ってOpenEXR画像に3DLUTを焼き込む

Last updated at Posted at 2023-02-23

自己紹介

株式会社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ページを見にきてください。一緒にお仕事しましょう。

参考文献

OpenImageIO本家(英語)
OpenImageIO本家リファレンス(英語)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0