【问题标题】:How to solve ImportError: cannot import name splitfn in python如何解决 ImportError: cannot import name splitfn in python
【发布时间】:2016-04-07 04:52:47
【问题描述】:

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

sudo python calibrate.py image4.jpgcalibration.yaml --debug-dir out

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

【问题讨论】:

    标签: python windows raspberry-pi camera-calibration


    【解决方案1】:

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

    从普通导入 splitfn

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

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

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

    用法: calibrate.py [--debug] [--square_size] []

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

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

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

    【讨论】:

    • 谢谢你 bbergvt,这里还有一个问题 [--debug] 和 [--square_size] 和 [] 是什么?
    • 更新了答案以提供有关参数和可能的工作命令的更多详细信息 - 欢迎您!
    • 还有一个问题 plz..我得到了 common.py 文件并添加到我的当前目录并使用上面的命令运行,所以上面的 splitfn 错误消失了,但现在它显示如下错误:
    • 正在处理 image4.jpg... 找不到棋盘 OpenCV 错误:在 calibrateCamera 文件 /root/opencv-2.4.10/modules/calib3d/src/calibration.cpp 中断言失败(nimages > 0) ,第 3415 行 Traceback(最近一次调用最后一次):文件“calibrate.py”,第 87 行,在 rms,camera_matrix,dist_coefs,rvecs,tvecs = cv2.calibrateCamera(obj_points,img_points,(w,h),无, None) cv2.error: /root/opencv-2.4.10/modules/calib3d/src/calibration.cpp:3415: error: (-215) nimages > 0 in function calibrateCamera 那么如何解决这个问题?
    • 从它的声音来看,代码无法从您的单个图像中识别出棋盘。基于此 - stackoverflow.com/questions/20706719/… 听起来您将需要超过 1 个图像,并且需要提供一个掩码作为参数以允许软件找到它们 - 如果您将图像命名为 image4.jpg image5.jpg image6.jpg 等,则命令将是 sudo python calibrate.py --debug ./ --square_size 1 image*.jpg 听起来你可能需要 10-20 张棋盘图像才能获得好的结果
    【解决方案2】:

    splitfn 只提供输入文件的路径、文件名(无 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]
    

    【讨论】:

      【解决方案3】:

      转到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
      

      【讨论】:

        猜你喜欢
        • 2015-03-07
        • 1970-01-01
        • 2020-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 1970-01-01
        • 2019-10-25
        相关资源
        最近更新 更多