【问题标题】:how to stack input *.tif files to a new output.tif raster file [closed]如何将输入 *.tif 文件堆叠到新的 output.tif 光栅文件 [关闭]
【发布时间】:2021-08-01 06:36:17
【问题描述】:

我想堆叠光栅文件 (.tiff) 并创建一个新的光栅 (.tiff)。 输入的栅格文件是 RGB 的,需要在不改变颜色的情况下进行组合。 谁能帮我堆叠它们并组合一个新的 RGB 文件?

清除问题的示例: inputfile1.tif 包含一个红色的 A inputfile2.tif 包含一个蓝色 C inputfile3.tif 包含一个绿色的 S …… inputfile15.tif 包含一个紫色 X

outputfile.tif 包含红色 A、蓝色 C、绿色 S、...、紫色 X

This is how I want to stack the raster data

【问题讨论】:

  • Stack Overflow 不是代码编写或教程服务。请edit您的问题并发布what you have tried so far,包括示例输入、预期输出、实际输出(如果有)以及任何错误或回溯的全文均按格式问题本身中的文本。 不要发布文本图像。

标签: python raster tiff


【解决方案1】:

假设您有一个名为 tiffs 的文件夹,其中包含以下图片:

inputfile01.tif

inputfile02.tif

inputfile03.tif

inputfile15.tif

以下脚本使用第三方模块PIL打开您的.tif图像,并生成合成图像。您没有指定应如何将它们缝合在一起,因此此脚本只是将它们从左到右并排放置在一行中。它按照pathlib.Path.glob 发现图像文件路径的顺序插入它们 - 在本例中按字典顺序(这就是为什么我在通常只有一个数字的文件名中添加前导零的原因)。

def main():

    from PIL import Image
    from pathlib import Path
    from itertools import accumulate

    paths = Path("tiffs").glob("*.tif")

    images = list(map(Image.open, paths))

    offsets = list(accumulate((image.size[0] for image in images), initial=0))

    width = offsets[-1]
    height = max(image.size[1] for image in images)

    composite = Image.new("RGB", (width, height))

    for x_offset, image in zip(offsets, images):
        composite.paste(image, (x_offset, 0))
        image.close()

    composite.show()
    
    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

这应该适用于任意数量的图像,具有任意文件名。

【讨论】:

猜你喜欢
  • 2022-01-26
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多