代码:
from PIL import Image
import numpy as np
img = Image.open('test.tif')
imarray = np.zeros(shape = (34,23,18))
for i in range(34): # there are 34 images in the .tif file
for j in range(18): # each slice has size 18x23
for k in range(23):
try:
img.seek(i)
imarray[i,k,j] = img.getpixel((k,j))
except EOFError:
break
此代码的目的是接受.tif灰度堆栈。我希望能够将它们作为numpy数组使用,因此存储原始像素值至关重要。
此代码将每个切片成功复制到np.array“ imarray”。但是,它更改值。例如,我打印了给定切片的所有“ img.getpixel”值,值(int型)的范围在2000到65500之间。但是,imarray(float64型)中的值未超过2800。我尝试了强制转换,即:
imarray[0,j,i] = np.float64(img.getpixel((j,i)))
但这没有帮助。如何修改此代码以避免输入数据(img.getpixels)更改?如果有更好的替代方法,我很高兴听到