在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
将会是ndarray
types的。
根据文档,虽然它实际上是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 ,但我没有尝试过。