[英]Write a tiff stack with python and keep file name
我有一個包含 5 個 tiff 圖像的文件夾,我想將它們放在一個堆棧文件中。
img01.tiff、img20.tiff、img25.tif、img30.tif、img50.tif
處理后,我想將該堆棧轉換為單個圖像,並保留文件名。
堆疊我做:
import tifffile as tiff
import os
from natsort import natsorted
path='img_folder'
output_filename='stack.tiff'
with tiff.TiffWriter(output_filename, bigtiff=True) as tif_writer:
for idx, filename in enumerate(natsorted(os.listdir(path))):
print(filename)
img=tiff.imread(os.path.join(path,filename),name=filename)
tif_writer.save(img)
我嘗試在描述參數或元數據(信息和標簽)上寫入,但它不起作用:
tif_writer.save(img, photometric='minisblack', metadata={'Info': filename}, description=filename)
無論如何,文件名信息都會丟失,或者我現在不知道如何訪問它。
任何幫助將非常感激!
從源頭上,
[描述和元數據] 僅與系列的第一頁一起保存。
編輯:我更新了這個例子以包括@cgohlke 建議的兩個選項
默認情況下,像這樣按順序使用TiffWriter.write
或TiffWriter.save
將在結果圖像中創建一個單獨的系列,並將描述保存到每個系列的第一頁。
import numpy as np
import tifffile
with tifffile.TiffWriter('temp.tif') as tif:
for i in range(4):
filename = f"image_{i}"
img = np.random.randint(0, 1023, (256, 256), 'uint16')
tif.save(img, photometric='minisblack', description=filename)
with tifffile.TiffFile('temp.tif') as tif:
for series in tif.series:
first_page = series[0]
print(first_page.description)
# tif.asarray returns the first series by default,
# so `key` is needed to create the stack from multiple series.
stack = tif.asarray(key=slice(None))
print(stack.shape)
# image_0
# image_1
# image_2
# image_3
# (4, 256, 256)
通過設置metadata=None
,您可以將單個頁面寫入同一個系列並遍歷頁面以獲取描述。
import numpy as np
import tifffile
with tifffile.TiffWriter('temp.tif') as tif:
for i in range(4):
filename = f"image_{i}"
img = np.random.randint(0, 1023, (256, 256), 'uint16')
tif.save(img, photometric='minisblack', description=filename, metadata=None)
with tifffile.TiffFile('temp.tif') as tif:
for page in tif.pages:
print(page.description)
stack = tif.asarray() # no need for `key` because pages in same series
print(stack.shape)
# image_0
# image_1
# image_2
# image_3
# (4, 256, 256)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.