How to read the alpha channel of a TIFF image in Python OpenCV?

Nan An picture Nan An · Feb 8, 2014 · Viewed 10.4k times · Source

I want to read the alpha channel from a tiff image using Python OpenCV. I am using Enthought Canopy with OpenCV 2.4.5-3 module.

I followed the OpenCV website's tutorial using cv2.imread, but it doesn't seem to work.

What I have now is:

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

Then I used: print (image.shape), it still shows the (8192, 8192, 3). But I used Matlab to read the same image, I can see the dimension of this image is (8192, 8192, 4).

I am not sure what should I do to read the alpha channel of this image.

Thanks in advance!! Nan

Answer

GT. picture GT. · May 13, 2015

This is an old question, but just in case someone else stumbles on it: if img.tiff is a 4-channel TIFF, then

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

yields (212,296,4) as expected.

If you then use

channels = cv2.split(img)

you can reference the alpha layer (channels[3]) - for instance, as a mask.

The idea for this was taken from How do I use Gimp / OpenCV Color to separate images into coloured RGB layers? which cleverly uses a fake layer and merge to enable recovery of the individual RGB layers in their actual colours.