Search code examples
pythonarraysimagenumpytiff

Load a tiff stack in a numpy array with python


I am having a little issue with .tif files. I am sure it is only a minor problem that I can´t get around (keep in mind, I am a relatively new programmer).

Basically: I have prepared .tif files that are 64x64xn in size (n up until 1000). The image is only a single file that contains all of this slices. I would like to load the image into a (multidimensional) numpy array. I have tried:

from PIL import Image as pilimage

file_path=(D:\luca\test\test.tif)
print("The selected stack is a .tif")
dataset = pilimage(file_path)
tiffarray = np.array(dataset)
expim = tiffarray.astype(np.double);
print(expim.shape)

and other things (like tifffile). I only seem to be able to read the first slice of the stack. Is it possible for "expim" to contain all information that is saved in the tiff stack?


Solution

  • PIL has a function seek to move to different slices of a tiff stack.

    from PIL import Image
    
    file_path=(D:\luca\test\test.tif)
    print("The selected stack is a .tif")
    dataset = Image.open(file_path)
    h,w = np.shape(dataset)
    tiffarray = np.zeros((h,w,dataset.n_frames))
    for i in range(dataset.n_frames):
       dataset.seek(i)
       tiffarray[:,:,i] = np.array(dataset)
    expim = tiffarray.astype(np.double);
    print(expim.shape)