我实际上是在使用imageio.mimwrite()
将图像保存到tiff文件中。但是在脚本中,我多次打开和关闭文件,因此在保存新闻图像之前,它会擦除现有图像。我想将现有图像保留在tiff文件中,而只添加新图像而不删除以前的图像。我在文档中找不到任何可以帮助我的东西。
我实际上正在使用这个:
imageio.mimwrite("example.tiff", image, format=".tiff")
image
是一个包含整数数组的数组,每个数组代表一幅图像。
此代码将打开example.tiff
,删除现有图像(如果存在)并编写新闻图像。但我想像open("file.txt", "a")
一样添加。
答案 0 :(得分: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
然后,我使用随TIFF库一起分发的工具tiffcp
和-a
选项,将蓝色和渐变图像附加到绿色图像上,如下所示:
tiffcp -a blue.tif gradient.tif green.tif
如果我随后用 ImageMagick green.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()
来封装tiffcp
。
答案 1 :(得分:0)
使用tifffile一次写入一页(在本例中为CTYX多页),如果您有足够的RAM来使用tifffile.imwrite(filename,array),则可以直接从n-D数组直接写入。 https://pypi.org/project/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