You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python focus-stacking工具时遭遇IndexError: list index out of range错误

问题:focus-stack处理TIFF图像时触发IndexError

操作场景

使用focus-stack工具处理TIFF格式图像,在Linux虚拟环境中执行命令:

focusstack -i /projectnb/npbssmic/ac25/focus_stacking/Zstack -otest.png

报错信息

INFO:focus_stack.focus_stack:reading images
INFO:focus_stack.focus_stack:aligning images
Traceback (most recent call last):
File "/projectnb/npbssmic/ac25/.conda/envs/pytorch_env/bin/focusstack", line 33, in
sys.exit(load_entry_point('focus-stack', 'console_scripts', 'focusstack')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projectnb/npbssmic/ac25/focus_stacking/focus-stack/focus-stack/focus_stack/run.py", line 58, in main
stacked = stacker.focus_stack(image_files)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projectnb/npbssmic/ac25/focus_stacking/focus-stack/focus-stack/focus_stack/focus_stack.py", line 41, in focus_stack
images = self._align_images(image_matrices)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projectnb/npbssmic/ac25/focus_stacking/focus-stack/focus-stack/focus_stack/focus_stack.py", line 84, in _align_images
aligned_imgs.append(images[0])
~~~~~~^^^
IndexError: list index out of range

源码分析

查看focus_stack核心代码,推测是cv2.imread()读取目录文件失败,导致image_matrices为空列表:

def focus_stack(self, image_files: List[str]) -> np.ndarray:
    """Pipeline to focus stack a list of images."""
    image_matrices = self._read_images(image_files)
    images = self._align_images(image_matrices)
    laplacian = self._compute_laplacian(images)
    focus_stacked = self._find_focus_regions(images, laplacian)
    return focus_stacked

@staticmethod
def _read_images(image_files: List[str]) -> List[np.ndarray]:
    """Read the images into numpy arrays using OpenCV."""
    logger.info("reading images")
    return [cv2.imread(img) for img in image_files]

目录情况

目标目录/projectnb/npbssmic/ac25/focus_stacking/Zstack下包含多个TIFF格式图像文件(如zstack_0001.tif等)

排查与解决方案

1. OpenCV缺少TIFF读取支持

OpenCV的cv2.imread()默认可能无法识别16位或特殊编码的TIFF文件,需安装TIFF支持库:

conda install -c conda-forge opencv-tiff

也可改用PIL/Pillow读取图像后转成OpenCV兼容格式,修改_read_images方法:

from PIL import Image
import numpy as np

@staticmethod
def _read_images(image_files: List[str]) -> List[np.ndarray]:
    """Read the images into numpy arrays using PIL."""
    logger.info("reading images")
    imgs = []
    for img_path in image_files:
        with Image.open(img_path) as img:
            # 转换为OpenCV默认的BGR通道顺序
            img_np = np.array(img.convert("RGB"))[:, :, ::-1]
            imgs.append(img_np)
    return imgs

2. 工具未正确匹配TIFF文件

focus-stack可能默认只识别常见图像后缀,需明确指定TIFF文件:

focusstack -i /projectnb/npbssmic/ac25/focus_stacking/Zstack/*.tif -otest.png

3. 文件权限不足

检查当前用户对TIFF文件的读取权限:

ls -l /projectnb/npbssmic/ac25/focus_stacking/Zstack/

若权限不足,执行以下命令修改:

chmod +r /projectnb/npbssmic/ac25/focus_stacking/Zstack/*.tif

内容的提问来源于stack exchange,提问作者ac25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:35:12