我编写了一个模块,它获取目录中的所有 TIFF 图像,对每个图像文件中的所有帧进行平均,并将平均图像保存到由以下指定的自动生成的子目录中outputPath:
def average_tiff_frames(inputPath):
'''
This function opens all TIFF image files in a directory, averages over all frames within each TIFF file,
and saves the averaged images to a subdirectory.
Parameters
----------
inputPath : string
Absolute path to the raw TIFF files
'''
import datetime
import os
import numpy as np
from PIL import Image
# Read image file names, create output folder
while True:
try:
inputPath = os.path.join(inputPath, '') # Add trailing slash or backslash to the input path if missing
filenames = [filename for filename in os.listdir(inputPath)
if filename.endswith(('.tif', '.TIF', '.tiff', '.TIFF'))
and not filename.endswith(('_avg.tif'))]
outputPath = os.path.join(inputPath, datetime.datetime.now().strftime('%Y%m%dT%H%M%S'), '')
os.mkdir(outputPath)
break
except FileNotFoundError:
print('TIFF file not found - or - frames in TIFF file already averaged (file name ends with "_avg.tif")')
# Open image files, average over all frames, save averaged image files
for filename in filenames:
img = Image.open(inputPath + filename)
width, height = img.size
NFrames = img.n_frames
imgArray = np.zeros((height, width)) # Ordering of axes: img.size returns (width, height), np.zeros takes (rows, columns)
for i in range(NFrames):
img.seek(i)
imgArray += np.array(img)
i += 1
imgArrayAverage = imgArray / NFrames
imgAverage = Image.fromarray(imgArrayAverage)
imgAverage.save(outputPath + filename.rsplit('.')[0] + '_avg' + '.tif')
img.close()
return outputPath
这里有什么问题吗?
我的第一个想法是,它outputPath是循环本地的while True: try,并且在 后被破坏break,所以我outputPath = ''在循环之前实例化了一个空字符串,但这没有帮助。
一只名叫tom的猫
相关分类