我已经在我的calibrate.py文件中编写了校准相机的代码,但是当我运行该文件时它显示错误,例如,ImportError:无法导入名称splitfn ..so如何解决这个问题?...我已经运行了这个文件使用此命令:
sudo python calibrate.py image4.jpg calibration.yaml --debug-dir out
这是执行此脚本的正确命令吗?如果有任何更改,则plz建议我..我拍摄的校准图像(我已作为输入)和输出(RMS,相机矩阵,失真系数)存储在校准中.yaml文件?我需要制作这个文件还是自动创建?
答案 0 :(得分:1)
看起来你没有得到代码存储库的其余部分。这行找不到common.py,它是定义splitfn函数的地方:
来自普通导入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
答案 1 :(得分:1)
转到 https://github.com/opencv/opencv/blob/master/samples/python/common.py 下载此文件,或者您可以复制此代码并将其粘贴到 calibrate.py
def splitfn(fn):
path, fn = os.path.split(fn)
name, ext = os.path.splitext(fn)
return path, name, ext
答案 2 :(得分:0)
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]