我想从无法一次全部加载到内存的非常大的h5py数据集中创建png或tiff图像文件。所以,我想知道python中是否有办法在补丁中写入png或tiff文件?(我可以将切片中的h5py数据集加载到numpy.ndarray
)。我试过使用枕头库并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))
我正在寻找一种方法,而无需将整个图像加载到内存中。我已经尝试过枕头库,但是它会加载/保留内存中的所有数据。
编辑:这个问题不是关于h5py的,而是关于我们可以将多少大图像(无法加载到内存中)以补丁方式写出到文件中-类似于可以通过逐行写入来构造多大文本文件。
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()
这将创建一个带有一个条带的未压缩BigTIFF文件。内存映射图块尚未实现。不确定有多少个库可以处理这种文件,但是您始终可以使用TIFF标记中的元数据直接从带中读取。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句