在 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
文件格式,而不是 TIFF
。 EXR v1
和 EXR 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.
我有一些 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
文件格式,而不是 TIFF
。 EXR v1
和 EXR 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.