0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCVでHDR動画を読み込み、書き出す時にトーンマップで見た目をいい感じにする

Posted at

OpenCVでのHDR動画の読み出しと書き出し

最近は、WindowsのAutoHDRという機能で、ゲームをすると自動的にHDRになり、ゲームキャプチャもHDR画質で録画されているのですが、OpenCVでHDRの動画を読み込み、書き出しをすると、元に比べて白っぽい動画が出力されてしまいます。
OpenCVはこういう変換も得意分野だろう、と思いながら、検索したのですがあまりぴったりの記事は見つかりませんでした。

Windows Copilotに相談してみるも、正しいコードは返答されませんでしたが、トーンマップで調整するんだ、ということだったので、その数値を変更して、私なりに元のHDR動画に近い印象のSDR動画を出力できるようになりました。
参考までにコードを載せておきます。
生成AIによるコードを直したものなので、もうちょっと良い適切なやり方があれば、教えてください。
よろしくお願いします。

opencv.py
import cv2
import numpy as np

def apply_tone_mapping(hdr_image):

    # トーンマッピングアルゴリズムを選択(例:Reinhardのアルゴリズム)
    tonemap = cv2.createTonemapReinhard(gamma=0.35)

    # 32ビット浮動小数点型に変換
    hdr_image = hdr_image.astype(np.float32) / 255.0

    # トーンマップ
    ldr_image = tonemap.process(hdr_image)

    # NaNを0に置き換え
    ldr_image = np.nan_to_num(ldr_image)

    # 0-255の範囲にクリップ
    ldr_image = np.clip(ldr_image * 255, 0, 255).astype(np.uint8)
    return ldr_image

def main():
    # HDR動画の読み込み
    input_video_path = "****.mp4"
    output_video_path = "****.mp4"

    cap = cv2.VideoCapture(input_video_path)
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    frame_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

    # 動画書き出しの設定
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(output_video_path, fourcc, fps, frame_size)

    while True:
        ret, hdr_frame = cap.read()
        if not ret:
            break

        ldr_frame = apply_tone_mapping(hdr_frame)
        # 動画書き出し
        out.write(ldr_frame)

    cap.release()
    out.release()

    print(f"動画を {output_video_path} に保存しました。")

if __name__ == "__main__":
    main()
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?