我想使用TIFF图像有效地保存大量的测量数据。将它们设置为mode =“I; 16”(对应于我的16位数据范围),它们产生2MB文件(~1000x1000“像素”)。哪个好。
然而,在分析它们时,我遇到了将它们重新转换为数组的麻烦。对于32位数据( - >“I”),numpy.array命令工作正常。在“I; 16”的情况下,结果是0D numpy数组,其中TIFF为[0,0]条目。
有没有办法让它发挥作用?我真的想避免使用32位图像,因为我不需要这个范围,它可以将所需的硬盘空间加倍(计划中有很多很多测量...)
答案 0 :(得分:6)
这应该有效(枕头/ PIL解决方案,16位图像慢,见下文)。
from PIL import Image
import numpy as np
data = np.random.randint(0,2**16-1,(1000,1000))
im = Image.fromarray(data)
im.save('test.tif')
im2 = Image.open('test.tif')
data2 = np.array(im2.getdata()).reshape(im2.size[::-1])
C. Gohlke使用tifffile的另一种解决方案(非常快):
import tifffile
fp = r'path\to\image\image.tif'
with tifffile.TIFFfile(fp) as tif:
data = tif.asarray()
答案 1 :(得分:3)
你可以使用GDAL + Numpy / Scipy来读取16位通道数据的光栅图像:
import gdal
tif = gdal.Open('path.tif')
arr = tif.ReadAsArray()
答案 2 :(得分:0)
将(ImageJ)TIFF转换为8位numpy数组
im = numpy.array(Image.open('my.tiff'))
n = (im / numpy.amax(im) * 255).astype(numpy.uint8)