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

新手上路,请多包涵

我需要一个 python 方法来打开 TIFF 图像并将其导入到 numpy 数组中,这样我就可以分析和修改像素数据,然后再次将它们保存为 TIFF。 (它们基本上是灰度的光强度图,代表每个像素的相应值)

我找不到有关 TIFF 的 PIL 方法的任何文档。我试图弄清楚,但只有“错误模式”或“不支持文件类型”错误。

我需要在这里使用什么?

原文由 Jakob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

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

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

这显示了彩虹图像。要转换为 numpy 数组,它很简单:

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

我们可以看到图像的大小和数组的形状匹配:

 >>> 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>

原文由 jterrace 发布,翻译遵循 CC BY-SA 3.0 许可协议

我使用 matplotlib 读取 TIFF 文件:

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

I 将是类型 ndarray

根据文档,虽然在处理 TIFF 时实际上是 PIL 在幕后工作,因为 matplotlib 仅本地读取 PNG,但这对我来说一直很好。

还有一个 plt.imsave 保存功能。

原文由 Michael Brennan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题