如何逐个写入png / tiff文件?

刺客 :

我想从无法一次全部加载到内存的非常大的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的,而是关于我们可以将多少大图像(无法加载到内存中)以补丁方式写出到文件中-类似于可以通过逐行写入来构造多大文本文件。

cgohlke:

试试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()

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取总页数从TIFF文件

如何串联多个多页tiff文件?

python cvs和xlrd:如何逐个单元地写入csv文件

如何从openGL屏幕写入PNG文件?

Matlab - Blockproc/tifflib 在写入大 tiff 文件时失败

如何使用gmmagick将多个tiff文件转换为png文件?

如何将每个TIFF图层提取到单独的文件(png / jpg)?

如何使用Java通过图块读取TIFF文件?

如何在Windows上分割多页TIFF文件?

TIFF文件-如何解码压缩类型3和4

如何捕获 GTK 窗口并将其写入 PNG 文件?

Python:如何从numpy数组写入单个通道png文件?

如何将张量写入PNG图像文件?

如何将多个图像TIFF文件转换为JPEG文件?

如何处理具有不兼容的ICC颜色配置文件的TIFF文件

如何将TIFF文件列表传递给TessAPI1.TessBaseAPIProcessPages

如何将TIFF图像文件转换为Android位图

如何在图像分割中将 tf.Dataset 与 TIFF 文件一起使用?

如何解决TiffFileError:不是KeyError:b'\ x89P'的Tiff文件和字节问题

如何使用python查找tiff文件中存在的图像(页面)的原始格式?

如何使用java将多个多页tiff文件合并为单个pdf?

Tiff 编辑:如何将文本添加到现有的 tif 文件?

如何将 dzi 文件转换为多瓦金字塔 tiff 格式

如何形成一个 gstreamer 管道来编码来自 tiff 文件的 mp4 视频?

如何在JAVA中将两个或多个tiff图像文件合并为一个多页tiff图像

如何将base64解码的png图像写入文件?

如何使用查找结果逐个文件执行sed?

如何在Go中逐个字符读取文件

如何在bash中逐个读取ls命令列出的文件?