尝试使用 Python 焦点堆叠工具:IndexError:列表索引超出范围

Trying to use Python focus-stacking tool: IndexError: list index out of range

提问人:ac25 提问时间:11/16/2023 最后编辑:ac25 更新时间:11/16/2023 访问量:38

问:

我正在尝试在我拥有的一组图像上使用此焦点堆叠工具,但我收到错误。这是我在 Linux 终端中使用的命令:

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

我在虚拟环境中工作,我指定的目录是包含图像的目录的完整路径。它们是.tif格式。我将在下面放置此目录的屏幕截图,但首先这是我得到的错误:

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 <module>
    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

我查看了源代码,似乎这个错误是因为对我目录中的文件调用 cv2.imread() 不起作用,但我不确定为什么。这是我所指的源代码:

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]

以下是目录的样子,以防万一:

目录

python 图像处理 索引错误

评论

0赞 Mark Setchell 11/16/2023
您的文件是否真的位于文件系统的根目录中,或者它们是否位于相对于当前目录的目录中,该目录不以斜杠开头,即/projectnb/npbssmic/ac25/focus_stacking/Zstackprojectnb/npbssmic/ac25/focus_stacking/Zstack
0赞 Christoph Rackwitz 11/16/2023
需要最少的可重复示例。您的错误是 IndexError,而不是来自 imread()。如果 imread() 返回 None,则使用。os.path.exists()
0赞 ac25 11/16/2023
@MarkSetchell我相信我拥有的路径不是相对于我当前的目录的,因为我一直用来从任何地方访问 Zstack 目录的路径也是如此。另外,我的工作目录是/projectnb/npbssmic/ac25/focus_stacking/Zstackfocus_stacking
0赞 ac25 11/16/2023
@ChristophRackwitz 让我添加我认为是发生错误的地方的源代码。另外,我相信我的路径存在并且是正确的,但我现在看到焦点堆栈工具需要我没有使用的 opencv < 3.4.2 版本,所以也许这与它有关。
0赞 Mark Setchell 11/16/2023
尝试使用调试器,或在打开文件的列表推导式之前。它们添加以查看程序在尝试获取文件列表时的运行位置。print(image_files)print(os.getcwd())

答: 暂无答案