Nan An
Nan An

Reputation: 683

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

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

Upvotes: 12

Views: 13451

Answers (3)

Li Pi
Li Pi

Reputation: 1

I solved the same problem with:

pip install --upgrade opencv-python

Upvotes: -3

GT.
GT.

Reputation: 1160

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.

Upvotes: 17

Alexandr  Abramov
Alexandr Abramov

Reputation: 156

I found a solution this problem in converting the original image to RBGA format through PIL library.

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)

Upvotes: 1

Related Questions