从多个 tiff 格式图像中提取帧

Extract frames from multiple tiff format images

我有一个需要分解的 tiff 图像数据集。每个文件有 50 帧,目前我正在一个一个地分解,但与我拥有的图像数量相比,分解每个图像需要很长时间。我的目标是对于一个文件夹中的每个 tiff 文件,我想将它们分解并存储在一个单独的文件夹中,其中每个 tiff 图像总是有 50 帧,例如:

inside C:\Dataset\tiff-images\

我有 tiff-image1、tiff-image2、tiffimage3、tiffimage4。

仍在同一目录中,我有以下文件夹:tiff-image1、tiff-image2、tiff-image3、tiff-image4。

基本上,我想要的是简单地遍历目录中尽可能多的 tiff 图像,并通过创建一个文件夹将它们分解到各自的文件夹中,以防万一没有。

我现在尝试的方式并不是最理想的,我需要很长时间才能完成这个过程:

imagepath = "tiff-image1.tif"
path = "C:/Dataset/tiff-images/" + imagepath
img = Image.open(path)

for i in range(50):
    try:
        img.seek(i)
        img.save('C:/Dataset/tiff-images/tiff-image1-folder1/tiff-image1-decomp.tif%s.tif'%(i,))
    except EOFError:
        break

imagepath = "tiff-image2.tif"
path = "C:/Dataset/tiff-images/" + imagepath
img = Image.open(path)

for i in range(50):
    try:
        img.seek(i)
        img.save('C:/Dataset/tiff-images/tiff-image2-folder2/tiff-image2-decomp.tif%s.tif'%(i,))
    except EOFError:
        break

imagepath = "tiff-image3.tif"
path = "C:/Dataset/tiff-images/" + imagepath
img = Image.open(path)

for i in range(50):
    try:
        img.seek(i)
        img.save('C:/Dataset/tiff-images/tiff-image3-folder3/tiff-image3-decomp.tif%s.tif'%(i,))
    except EOFError:
        break

imagepath = "tiff-image4.tif"
path = "C:/Dataset/tiff-images/" + imagepath
img = Image.open(path)

for i in range(50):
    try:
        img.seek(i)
        img.save('C:/Dataset/tiff-images/tiff-image4-folder4/tiff-image4-decomp.tif%s.tif'%(i,))
    except EOFError:
        break

您可以使用 os 模块进行此类自动化。 检查这个:

import os
from PIL import Image

# enter the main folder path here
path = './'

lsdir = os.listdir(path)

for f in lsdir:
    if os.path.isfile(f):
        file, ext = os.path.splitext(f)
        if ext in ['.tif', '.tiff']:
            fldr = os.path.join(path, file)
            if not os.path.isdir(fldr):
                os.mkdir(fldr)

            imgpath = os.path.join(path, f)
            img = Image.open(imgpath)
            for i in range(50):
                try:
                    img.seek(i)
                    img.save(f'{fldr}/decomp{i}.tif')
                except EOFError:
                    break