可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Hallo Stack Overflow community,
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?
Any help is appreciated!
回答1:
I am not sure if there is a way to get PIL to open multiple slices of a tiff stack.
If you are not bound to using PIL, however, an alternative is scikit-image, which opens multiple slices from a tiff stack by default. Here is some sample code of how to load a tiff stack into a Numpy array using scikit-image:
>>> from skimage import io >>> im = io.imread('an_image.tif') >>> print im.shape (2, 64, 64)
Note that the imread function loads the image directly into a Numpy array. Also, the dimensions of the resulting array are ordered (z, y, x) where z represents the depth, y represents the height, and x represents the width. Thus, to get a single slice from the stack all you have to do is:
>>> print im[1].shape (64, 64)
回答2:
PIL has a function seek
to move to different slices of a tiff stack.
from PIL import Image as pilimage file_path=(D:\luca\test\test.tif) print("The selected stack is a .tif") dataset = pilimage(file_path) w,h = dataset.size tifarray = np.zeros((w,h,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)