在 Python 阅读第 5 个 TIFF 频道?

Reading 5th TIFF's channel in Python?

我有一些 TIFF 文件,它们是 Maya 渲染器的输出,我需要将它们与一些真实的素材合成。 TIFF 文件有 5 个通道,rgba + depth 通道用于合成。但是,我尝试过的所有 TIFF 加载库似乎都丢弃了第 5 层。

有没有办法将其与图像的其余部分一起加载?

你可以这样做:

import cv2

image = cv2.imread('yourImage.tiff', cv2.IMREAD_UNCHANGED)
print image.shape 

channels = cv2.split(image)

channels[0] # R channel
channels[1] # G channel
channels[2] # B channel
channels[3] # A channel
channels[4] # Z channel

但是对于合成,您应该使用具有不同压缩算法的 16 位或 32 位 OpenEXR 文件格式,而不是 TIFFEXR v1EXR v2 最多支持 1023 个渲染通道,The Foundry NUKE 可以读取这些通道。 Read about OpenEXR here

Z 通道 (a.k.a. zDepth) 不利于合成,因为它会带来边缘伪像。请改用 Deep 渲染通道(您可以将深度通道存储在 OpenEXR 2.0 中)。 Read about Z pass artefacts here

您还可以在 EXR 文件中存储各种 AOV:法线、点位置、UV、环境光遮挡、阴影、视差、运动矢量等...Read about Deep compositing here.