首先,我尝试使用fish-eye stereo calibration
和Opencv
来进行Python
,我已经完成了单个摄像机的立体校准
print("Calibrating left fisheye camera...")
rms, _, _, _, _ = cv2.fisheye.calibrate(objectPoints,leftImagePoints,imageSize, K_left,D_left,R,T,flags,(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6))
print("calibrating right fisheye camera...")
rms, _, _, _, _ = cv2.fisheye.calibrate(objectPoints,rightImagePoints, imageSize,K_right,D_right,R,T,flags, (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6))
但是在下一步尝试执行stereofisheye calibration
时:
print("calibrating both fisheye cameras together...")
(rms,K1, D1, K2, D2, R, T) = cv2.fisheye.stereoCalibrate(
objectPoints,
leftImagePoints,
rightImagePoints,
K_left,
D_left,
K_right,
D_right,
imageSize)
它抛出错误:
回溯(最近通话最近): 文件“ fisheye_calib1.py”,行177 图片尺寸) cv2.error:OpenCV(4.0.0-pre)/ home / compute / OpenCV-tmp / opencv- 3 /模块/核心/src/arithm.cpp:683:错误:(-5:错误参数)当加/减/乘/除函数中的输入数组具有 不同的类型,必须在以下位置显式指定输出数组类型 函数“ arithm_op”
我是OpenCV
的新手。我真的很困惑,应该采取什么步骤来避免此错误。
答案 0 :(得分:0)
欢迎堆栈溢出!
好像您发送到stereoCalibrate
的数组不是同一类型。例如,在有人遇到相同错误消息的情况下,请参见此question。在Google快速搜索您的错误代码后,我找到了它。
所以我的猜测是,解决方法是确保所有您的矩阵属于同一类型。确保以相同的方式初始化它们。例如,它们是作为列表([4,4,5]
)还是作为Numpy
数组(OpenCV
的典型输出)创建的?这两个不会一起工作。
如果您仍在挣扎,则可以在stereoCalibrate
之前用以下方法强制使用它:
objectPoints = numpy.array(K_left, np.float)
...
K_left = ... # Do the above operation on each one
...
D_right = ...
我希望这会有所帮助!
注意:对于我的解决方案,您需要导入Numpy
包