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

时间:2014-02-08 22:44:51

标签: python opencv alpha channel

我想使用Python OpenCV从tiff图像中读取alpha通道。我正在使用Enthought Canopy和OpenCV 2.4.5-3模块。

我使用cv2.imread跟随OpenCV网站的教程,但它似乎不起作用。

我现在拥有的是:

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

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

我不知道该怎么做才能阅读此图片的Alpha通道。

提前致谢!! 南

3 个答案:

答案 0 :(得分:8)

这是一个老问题,但万一其他人偶然发现它:如果img.tiff是一个4通道TIFF,那么

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

按预期收益率(212,296, 4 )。

如果您再使用

channels = cv2.split(img)

您可以引用alpha图层(channels[3]) - 例如,作为蒙版。

这个想法取自How do I use Gimp / OpenCV Color to separate images into coloured RGB layers?,它巧妙地使用假层和merge来恢复各个RGB图层的实际颜色。

答案 1 :(得分: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

out> (800,689,4)

答案 2 :(得分:-1)

我解决了同样的问题:

pip install --upgrade opencv-python