Does anyone have a method for importing a 16 bit per channel, 3 channel TIFF image in Python?
I have yet to find a method which will preserve the 16 bit depth per channel when dealing with the TIFF format. I am hoping that some helpful soul will have a solution.
Here is a list of what I have tried so far without success and the results:
import numpy as np
import PIL.Image as Image
im = Image.open('a.tif')
# IOError: cannot identify image file
tif = libtiff.TIFF.open('a.tif')
im = tif.read_image()
# im only contains one of the three channels. im.dtype is uint16 as desired.
im = 
for i in tif.iter_images():
# still only returns one channel
im = np.array(cv2.imread('a.tif'))
# im.dtype is uint8 and not uint16 as desired.
# specifying dtype as uint16 does not correct this
It has limited functionality, especially when it comes to writing back to disk non RGB images, but Christoph Gohlke's
tifffile module reads in 3 channel 16-bit TIFFs with no problems, I just tested it:
>>> import tifffile as tiff >>> a = tiff.imread('Untitled-1.tif') >>> a.shape (100L, 100L, 3L) >>> a.dtype dtype('uint16')
And Photoshop reads without complaining what I get from doing:
>>> tiff.imsave('new.tiff', a)