numpy.array的“I; 16”图像文件

时间:2011-10-07 08:24:04

标签: python numpy python-imaging-library tiff

我想使用TIFF图像有效地保存大量的测量数据。将它们设置为mode =“I; 16”(对应于我的16位数据范围),它们产生2MB文件(~1000x1000“像素”)。哪个好。

然而,在分析它们时,我遇到了将它们重新转换为数组的麻烦。对于32位数据( - >“I”),numpy.array命令工作正常。在“I; 16”的情况下,结果是0D numpy数组,其中TIFF为[0,0]条目。

有没有办法让它发挥作用?我真的想避免使用32位图像,因为我不需要这个范围,它可以将所需的硬盘空间加倍(计划中有很多很多测量...)

3 个答案:

答案 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)