Извлечение кадров из нескольких изображений формата tiff

#python #image #image-processing #python-imaging-library #tiff

#python #изображение #обработка изображений #python-imaging-library #tiff

Вопрос:

У меня есть набор данных изображений в формате tiff, которые необходимо разложить. В каждом файле 50 кадров, и в настоящее время я разлагаю их один за другим, но по сравнению с количеством изображений, которые у меня есть, потребуется много времени, чтобы разложить каждое из них. Моя цель состоит в том, чтобы для каждого файла tiff внутри папки я хотел бы разложить и сохранить их в отдельной папке, где каждое изображение tiff всегда будет содержать 50 кадров, например:

внутри C:Datasettiff-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
  

Ответ №1:

Вы можете использовать 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
  

Комментарии:

1. os или glob, если вам нужно отфильтровать только изображения и для периодического поиска.