How to solve ImportError: cannot import name splitfn in python

How to solve ImportError: cannot import name splitfn in python

我已经在我的 calibrate.py 文件中编写了校准相机的代码,但是当我 运行 该文件时它显示错误,如 ImportError: cannot import name splitfn ..那么如何解决这个问题? ...我有 运行 这个文件,使用这个命令:

sudo python calibrate.py image4.jpg calibration.yaml --debug-dir out

执行此脚本的命令是否正确?如果有任何更改,请建议我..我捕获的用于校准的图像(我已将其作为输入提供)和输出(RMS、相机矩阵、失真系数)已存储在 calibration.yaml 文件中?我需要制作这个文件还是自动创建?

您似乎没有获得代码存储库的其余部分。此行找不到定义 splitfn 函数的 common.py:

来自普通导入 splitfn

您应该获取此代码来自的存储库的 Python 目录中的所有文件,或者至少获取 common.py 应该可以解决您提供的示例错误。

https://github.com/Itseez/opencv/tree/master/samples/python

此外,OpenCv 示例代码记录了如何从其中调用代码,所以不要认为您在调用中需要 .yaml 参数。

用法: calibrate.py [--调试] [--square_size] []

[--debug ] = 您希望将输出图像写入的路径 - 默认为 --debug: ./output/ -- 如果您希望将图像写入具有 [=31 的相同路径=] 你可以试试 --debug ./

不确定 --square_size 的作用,但默认为 1 最后输入的是图像的路径或名称,如果它与校准脚本位于同一目录中 - 如果 image4.jpg 是您的图像并且您想使用默认值写入当前路径,我认为:

sudo python calibrate.py --debug ./ --square_size 1 image4.jpg

splitfn只提供输入文件的路径,file_name(不带ext)和ext。 可以使用下面的实现。

#from common import splitfn
def splitfn(file_path):

    file_path_parts = file_path.split(sep=os.sep)
    _path = os.path.join(*file_path_parts[:-1])
    file_name = file_path_parts[-1]
    file_name_parts = file_name.split(sep='.')
    return _path, file_name_parts[0], file_name_parts[1]

转到 https://github.com/opencv/opencv/blob/master/samples/python/common.py 下载此文件,或者您可以复制此代码并将其粘贴到 calibrate.py

  • 这里是从commom.py复制的代码并粘贴到calibrate.py
def splitfn(fn):
    path, fn = os.path.split(fn)
    name, ext = os.path.splitext(fn)
    return path, name, ext