簡體   English   中英

用 python 寫一個 tiff 堆棧並保留文件名

[英]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 建議的兩個選項

選項 1:編寫單獨的系列

默認情況下,像這樣按順序使用TiffWriter.writeTiffWriter.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)

選項2:寫一個系列

通過設置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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM