做项目的时候遇到了一个问题,一个三维的图形,保存为tiff格式,每一页都是一张图片,用Image读取的时候,只能读取第一页的数据,不能读取全部的数据,去网上搜索的答案,需要安装其他包,感觉很麻烦。于是去plt帮助文档中,找到了读取全部页数的方法。
第一种方法通过遍历指定页数的方法输出图片。
from PIL import Image
img = Image.open("digital.tif")
for i in range(4): #可以用img.n_frames来得到总页数
try:
img.seek(i) #是否存在
img.show()
except EOFError: #页数读完了
break
第二种方法,利用plt自带的遍历函数
from PIL import Image, ImageSequence
img = Image.open("digital.tif")
for i, page in enumerate(ImageSequence.Iterator(img)):
page.show()
平时在处理的时候多是把图像变成array,可以通过以下函数来实现。
from PIL import Image
import numpy as np
def tifread(path):
img = Image.open(path)
images = []
for i in range(img.n_frames):
img.seek(i)
images.append(np.array(img))
return np.array(images)
imarray = tifread('digital.tiff')
举个小栗子
from PIL import Image
import numpy as np
def tiffread(path):
img = Image.open(path)
images = []
for i in range(img.n_frames):
img.seek(i)
images.append(np.array(img))
return np.array(images)
imarray=tiffread('digital.tif')
imarray.shape #输出(500,500,500)
img = Image.open("digital.tiff")
imarray = np.array(img)
imarray.shape #输出(500,500)