2014-02-08 134 views
6

我想使用Python OpenCV从tiff图像读取alpha通道。我在OpenCV 2.4.5-3模块中使用Enthought Canopy。如何在Python OpenCV中读取TIFF图像的Alpha通道?

我跟着OpenCV网站的教程使用cv2.imread,但它似乎没有工作。

我现在拥有的是:

import cv2 
image = cv2.imread('image.tif', -1) 

然后我用:print (image.shape),它仍然显示(8192,8192,3)。但我使用Matlab来读取相同的图像,我可以看到这个图像的尺寸是(8192,8192,4)。

我不知道该怎么做才能阅读这张图片的alpha通道。

在此先感谢! Nan

+0

不知道以下的答案为[“在OpenCV的Alpha通道”(http://stackoverflow.com/q/1451021/2419207)仍然是相关的,但它可能是:http://stackoverflow.com/a/2111434/2419207 – iljau

+0

谢谢,iljau!如果相同的图像是PNG文件,我可以使用cv2.imread读取它,我可以看到有4层。但如果格式是带有alpha通道的TIFF(Matlab可以显示它),它只显示3层。我想知道为什么? –

+0

不确定它是否相关,但是:[“OpenCV问题:8位tiff的alpha通道支持(修补程序#2791)”](http://code.opencv.org/issues/2791) – iljau

回答

1

我发现了一个解决方案,通过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 

出>(800,689,4)

+0

PIL是我现在使用的。但我在想如果OpenCV可以直接直接读取RGBA图像。 –

5

这是一个老问题,但只是在这情况下,别人绊倒:如果img.tiff是一个4通道TIFF,然后

import cv2 
img = cv2.imread('img.tiff', cv2.IMREAD_UNCHANGED) 
print img.shape 

收益率(212,296,)如预期。

如果然后使用

channels = cv2.split(img) 

可以引用阿尔法层(channels[3]) - 例如,作为掩模。

这种情况的想法是从How do I use Gimp/OpenCV Color to separate images into coloured RGB layers?其巧妙地使用假层和merge采取以使在它们的实际颜色的各个RGB各层的恢复。

+0

试过国旗,还有3个频道。我的cv2版本是2.4.9。也许它取决于cv2构建标志? Tiff图像是通过将“Alpha”通道添加到“Channels”选项卡来生成的。没有使用透明度或图层,只是背景图层。也许它也很重要。 – ogurets

+0

Photoshop是否将图像保存为RGBA(即专门将名为'Alpha'的图层注册为实际的Alpha图层)?如果不是这样的话,这将是有意义的,因为并非每个4通道图像都是RGBA。我经常会得到4层图像(一个名为'Alpha'),但需要明确“转换”为RGBA。在https://gis.stackexchange.com/questions/229758/gdal-python-api-warp-and-translate-struggling-with-rgba我有这个问题,并希望避免'转换为RGBA'步骤(需要~60ms /图像,但有~3m的图像......所以它增加了**愚蠢的**时间量)。 –

+0

我在CS4中没有这个选项(图像 - >模式没有像“RGBA”)。还检查了这个线程 - https://forums.adobe.com/thread/1587246,那些家伙也很困惑。我必须将这些文件保存为Tiff,并使用Xnview将它们批量转换为Png(alpha变成透明),并在OpenCV中使用Png。在OpenCV上也没什么可用的,即使内部变量只包含3个通道,也没有其他内容。 – ogurets

0

我解决了同样的问题:

pip install --upgrade opencv-python 
+1

你的意思是说你有同样的问题,升级OpenCV解决了吗? – pratibha

+0

是的,我发现一些评论说“openCV 2.4”有一些错误。所以这可能会改善。 –

相关问题