如何在Python OpenCV中读取TIFF图像的alpha通道?

如何在Python OpenCV中读取TIFF图像的alpha通道?,python,opencv,alpha,channel,Python,Opencv,Alpha,Channel,我想使用Python OpenCV从tiff图像读取alpha通道。我使用的是带有OpenCV 2.4.5-3模块的Enthow Corporation 我使用cv2.imread阅读了OpenCV网站的教程,但它似乎不起作用 我现在得到的是: import cv2 image = cv2.imread('image.tif', -1) 然后我使用:print(image.shape),它仍然显示(819281923)。但是我用Matlab读取了相同的图像,我可以看到这个图像的尺寸是(8192

我想使用Python OpenCV从tiff图像读取alpha通道。我使用的是带有OpenCV 2.4.5-3模块的Enthow Corporation

我使用cv2.imread阅读了OpenCV网站的教程,但它似乎不起作用

我现在得到的是:

import cv2
image = cv2.imread('image.tif', -1)
然后我使用:
print(image.shape)
,它仍然显示(819281923)。但是我用Matlab读取了相同的图像,我可以看到这个图像的尺寸是(8192,8192,4)

我不确定我应该做什么来读取此图像的alpha通道

提前谢谢!!
Nan

我通过PIL库将原始图像转换为RBGA格式,找到了解决此问题的方法

from PIL import Image
import numpy as np
import cv2

path_to_image = 'myimg.png'
image = Image.open(path_to_image).convert('RGBA')
image.save(path_to_image)

image = cv2.imread(path_to_image, cv2.IMREAD_UNCHANGED)
print image.shape

out>(800689,4)

这是一个老问题,但为了防止其他人无意中发现:如果img.tiff是一个4通道tiff,那么

import cv2
img = cv2.imread('img.tiff', cv2.IMREAD_UNCHANGED)
print img.shape 
收益率(212296,4)与预期一致

如果你使用

channels = cv2.split(img)
您可以引用alpha层(
通道[3]
)——例如,作为掩码


这一想法源自于巧妙地使用假层和
合并
,以恢复各个RGB层的实际颜色。

我解决了以下问题:

pip install --upgrade opencv-python

不确定以下答案是否仍然相关,但可能是:谢谢,伊尔贾!如果相同的图像是PNG文件,我可以使用cv2.imread读取它,我可以看到有4层。但是如果格式是TIFF,它有alpha通道(Matlab可以显示),它只显示3层。我想知道为什么?不确定是否相关,但是:这不是问题的答案,但我发现。。这是将图像转换为numpy数组的最方便的方法。或者,使用undercovers.PIL是我现在使用的。但是我在想OpenCV是否可以直接读取RGBA图像。尝试了这个标志,仍然得到了3个通道。我的cv2版本是2.4.9。也许这取决于cv2构建标志?Tiff图像是通过Photoshop将通道“Alpha”添加到“通道”选项卡生成的。没有使用透明度或图层,只使用背景图层。也许这也很重要。Photoshop是否将图像保存为RGBA(即,专门将名为“Alpha”的层注册为实际的Alpha层)?如果不是这样的话,这是有意义的,因为不是每个4通道图像都是RGBA。我经常得到有4层的图像(其中一层名为“Alpha”),但需要显式地“转换”为RGBA。在中,我遇到了这个问题,并希望避免“转换为RGBA”步骤(每幅图像需要约60毫秒,但有约300万张图像…因此它会增加愚蠢的时间)。我在CS4中没有此选项(图像->模式与“RGBA”完全不同)。也检查了这个帖子-,那些家伙也很困惑。我必须将文件保存为TIFF,并使用Xnview将其批量转换为Png(alpha将以这种方式变为透明),并在OpenCV中使用Png。此外,OpenCV没有什么可处理的,甚至内部变量也只包含3个通道,其他什么都没有。你是说你也有同样的问题,升级OpenCV解决了吗?是的,我发现一些评论说“OpenCV 2.4”有一些bug。因此,这可能会有所改善。