【问题标题】:How to join two TIFF files populated using memory-mapped IO如何连接使用内存映射 IO 填充的两个 TIFF 文件
【发布时间】:2019-12-20 11:17:46
【问题描述】:

我正在尝试编写一个 python 函数,它将在组合多个 TIFF 文件后输出单个 TIFF 文件。我有一个包含大量 TIFF 文件的文件夹,我正在尝试将每个 TIFF 文件合并到一个文件中。我必须将数据加载为 numpy 数组,并且还应该使用内存映射 IO 进行填充。

【问题讨论】:

  • 图片应该如何组合?堆叠?缝合?
  • 还有,到目前为止,您尝试了哪些方法,遇到了哪些问题?
  • 图像应该堆叠起来,我一直在使用带有 memmap 的 Tifffile 库来创建一个空的 TIFF 文件,但我对如何将所有文件合并成一个文件有点困惑。不幸的是,我不太习惯使用这种类型的数据,所以我在尝试将所有内容组合在一起时遇到了麻烦。
  • 我通常通过创建一个 3d numpy 数组来做到这一点,其中 z 轴是图像的数量,并在一个 z 层中切片每个图像。将结果保存为 tiff 就完成了。
  • 你有如何做到这一点的例子吗?抱歉,我对如何遍历每个 TIFF 文件然后将它们全部组合到数组中的确切语法有点迷茫。

标签: python numpy tiff numpy-ndarray memory-mapped-files


【解决方案1】:

未经测试的示例,应该会给您一个想法:

from pathlib import Path
import numpy as np
import tifffile

my_path = Path(r'path/to/tiffs')
output = Path('output.tiff')

tiffs = list(my_path.glob('*.tiff'))

x,y = (512,512) # either hardcode or read from first tiff

output = np.zeros((len(tiffs), x, y))

for i, image in enumerate(tiffs):
    a = tifffile.imread(image.open(mode = 'rb'))
    output[i, :, : ] = a

tifffile.imsave(output.open(mode='wb'), output)

【讨论】:

  • 您好,感谢您帮了大忙!我只是在保存 tiff 文件时遇到问题,因为我得到 errno 22,对此有什么想法吗?
  • 在哪一行?这通常意味着,文件不存在或者你没有写权限。
猜你喜欢
  • 1970-01-01
  • 2011-04-22
  • 2011-03-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2012-03-28
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多