在Python中使用numpy处理TIFF(导入,导出)

我需要一个可以打开和导入TIFF图像到numpy数组的Python例程,所以我可以分析和修改包含的数据,然后再保存为TIFF。 (它们基本上是灰度级的光照强度图,代表每个像素的相应值)

我试图find一些东西,但没有关于TIFF的PIL方法的文档。 我试图弄清楚,但只有不好的模式/文件types不支持错误。

我需要在这里使用什么?

首先,我从这个页面下载了一个名为a_image.tif的testingTIFF图像。 然后我像这样打开了PIL:

 >>> from PIL import Image >>> im = Image.open('a_image.tif') >>> im.show() 

这显示了彩虹图像。 要转换成一个numpy数组,就像下面这样简单:

 >>> import numpy >>> imarray = numpy.array(im) 

我们可以看到,图像的大小和arrays的形状相匹配:

 >>> imarray.shape (44, 330) >>> im.size (330, 44) 

该数组包含uint8值:

 >>> imarray array([[ 0, 1, 2, ..., 244, 245, 246], [ 0, 1, 2, ..., 244, 245, 246], [ 0, 1, 2, ..., 244, 245, 246], ..., [ 0, 1, 2, ..., 244, 245, 246], [ 0, 1, 2, ..., 244, 245, 246], [ 0, 1, 2, ..., 244, 245, 246]], dtype=uint8) 

一旦你完成了修改数组,你可以把它变成像这样的PIL图像:

 >>> Image.fromarray(imarray) <Image.Image image mode=L size=330x44 at 0x2786518> 

我使用matplotlib来读取TIFF文件:

 import matplotlib.pyplot as plt I = plt.imread(tiff_file) 

I将会是ndarraytypes的。

根据文档,虽然它实际上是PIL,在处理TIFF时在幕后工作,因为matplotlib本身只能读取PNG,但是这对我来说工作正常。

还有一个plt.imsave保存function。

你也可以使用GDAL来做到这一点。 我意识到这是一个地理空间工具包,但没有什么要求你有一个制图产品。

链接到Windows预编译的GDAL二进制文件(假设这里是Windows) http://www.gisinternals.com/sdk/

要访问数组:

 from osgeo import gdal dataset = gdal.Open("path/to/dataset.tiff", gdal.GA_ReadOnly) for x in range(1, dataset.RasterCount + 1): band = dataset.GetRasterBand(x) array = band.ReadAsArray() 

你也可以使用我是作者的pytiff 。

  import pytiff with pytiff.Tiff("filename.tif") as handle: part = handle[100:200, 200:400] # multipage tif with pytiff.Tiff("multipage.tif") as handle: for page in handle: part = page[100:200, 200:400] 

这是一个相当小的模块,可能没有其他模块的function,但它支持瓷砖tiffs和bigtiff,所以你可以阅读大部分图像的一部分。

pylibtiff比PIL(它不支持每种颜色超过8位的彩色图像)对我更好。

 from libtiff import TIFF tif = TIFF.open('filename.tif', mode='r') # read an image in the currect TIFF directory as a numpy array image = tif.read_image() # read all images in a TIFF file: for image in tif.iter_images(): pass tif = TIFF.open('filename.tif', mode='w') tif.write_image(image) 

如果你在python3上,你不能pip3 install libtiff 。 相反,手动安装

 git clone git@github.com:pearu/pylibtiff.git python3 setup.py install 

pylibtiff的自述文件也提到了tifffile.py ,但我没有尝试过。