gpt4 book ai didi

python - 如何逐个补丁写入 png/tiff 文件?

转载 作者:太空狗 更新时间:2023-10-29 19:27:07 27 4
gpt4 key购买 nike

我想从无法一次加载到内存中的非常大的 h5py 数据集创建一个 png 或 tiff 图像文件。所以,我想知道 python 中是否有一种方法可以在补丁中写入 png 或 tiff 文件? (我可以将切片中的 h5py 数据集加载到 numpy.ndarray)。我试过使用 pillow 库并执行 PIL.Image.paste 给出框坐标,但是对于大图像它会耗尽内存。

基本上,我想知道是否有办法做类似的事情:

for y in range(0, height, patch_size):
for x in range(0, width, patch_size):
y2 = min(y + patch_size, height)
x2 = min(x + patch_size, width)
# image_arr is an h5py dataset that cannot be loaded completely
# in memory, so load it in slices
image_file.write(image_arr[y:y2, x:x2], box=(y, x, y2, x2))

我正在寻找一种方法来执行此操作,而无需将整个图像加载到内存中。我试过 pillow 库,但它会将所有数据加载/保存在内存中。

编辑:这个问题与 h5py 无关,而是我们可以将多大的图像(无法加载到内存中)写入补丁中的文件 - 类似于通过写入 it 行可以构建多大的文本文件按行。

最佳答案

尝试 tifffile.memmap :

from tifffile import memmap

image_file = memmap('temp.tif', shape=(height, width), dtype=image_arr.dtype,
bigtiff=True)

for y in range(0, height, patch_size):
for x in range(0, width, patch_size):
y2 = min(y + patch_size, height)
x2 = min(x + patch_size, width)
image_file[y:y2, x:x2] = image_arr[y:y2, x:x2]

image_file.flush()

这将创建一个带有一个 strip 的未压缩 BigTIFF 文件。内存映射图 block 尚未实现。不确定有多少图书馆可以处理这种文件,但您始终可以使用 TIFF 标签中的元数据直接从 strip 读取。

关于python - 如何逐个补丁写入 png/tiff 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50892479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com