2

我实际上正在做的是将图像保存在 tiff 文件中,使用imageio.mimwrite(). 但在我的脚本中,我多次打开和关闭文件,因此它会在保存新闻图像之前删除现有图像。我想将现有图像保留在 tiff 文件中,并且只添加新图像而不删除以前的图像。我在文档中没有找到任何可以帮助我的东西。

我实际上正在使用这个: imageio.mimwrite("example.tiff", image, format=".tiff")

image是一个包含整数数组的数组,每个数组代表一个图像。

此代码打开example.tiff、删除现有图像(如果存在)并写入新闻图像。但我想添加喜欢的东西open("file.txt", "a")

4

2 回答 2

1

我使用ImageMagick制作了三个不同大小的 TIFF 图像,如下所示进行测试:

convert -size 640x480  xc:green             green.tif
convert -size 1024x768 xc:blue              blue.tif
convert -size 400x100 gradient:cyan-yellow  gradient.tif

然后我使用了tiffcp与 TIFF 库一起分发的工具以及-a将蓝色和渐变图像附加到绿色图像的选项,如下所示:

tiffcp -a blue.tif gradient.tif green.tif

如果我然后检查ImageMagickgreen.tiff的内容,我发现它看起来是正确的: identify

magick identify green.tif
green.tif[0] TIFF 640x480 640x480+0+0 16-bit sRGB 6.49355MiB 0.000u 0:00.000
green.tif[1] TIFF 1024x768 1024x768+0+0 16-bit sRGB 0.000u 0:00.000
green.tif[1] TIFF 400x100 400x100+0+0 16-bit sRGB 0.000u 0:00.000

如果我预览文件,所有三个图像都具有正确的尺寸和颜色:

在此处输入图像描述

所以,我建议你考虑使用subprocess.run()to shell out to tiffcp

于 2019-04-29T18:14:41.470 回答
0

使用 tifffile 一次写入一页(在示例中为 CTYX 多页),如果您有足够的 RAM 使用 tifffile.imwrite(filename,array) https://pypi.org/ ,则可以直接从 nD 数组写入项目/tifffile/

import tifffile as tf
with tf.TiffWriter("filenametest.tiff",
                    #bigtiff=True,
                    #If you want to add on top of an existing tiff file (slower) uncomment below
                    #append = True,
                    imagej=False,) as tif:
    for time in range(rgb.shape[1]):
         tif.save(rgb[:,time,:,:].,
                #compress= 3,
                photometric='minisblack',
                metadata= None,
                contiguous=False,
            )
tif.close()

使用 python-bioformats:

https://pythonhosted.org/python-bioformats/

bioformats.write_image(pathname, pixels, pixel_type, c=0, z=0, t=0, size_c=1, size_z=1, size_t=1, channel_names=None)[source]

如果你有:

  • 4个时间点

  • 3 个颜色 zstacks(11 个 Z)

  • XY 为 1024 像素。独立的numpy数组为[3,11,1024,1024](每个时间点一个),

  • 16 位,命名为:a,b,c,d。

这应该可以解决问题

import bioformats as bf
import numpy as np

#do something here to load a,b,c, and d

i=0
for t in [a,b,c,d]:
    for c in range(3):
        for z in range(11):
            #t here is the numpy array
            bf.write_image('/path/to/file.tiff' 
            , t
            , bf.PT_UINT16
            , c = c, z = z , t = i, size_c= 3, size_z=11, size_t=4
            )
    i+=1
于 2020-06-21T15:37:28.623 回答