立体视觉鱼眼镜头校准

时间:2018-08-24 08:20:37

标签: python opencv camera-calibration fisheye

首先,我尝试使用fish-eye stereo calibrationOpencv来进行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的新手。我真的很困惑,应该采取什么步骤来避免此错误。

1 个答案:

答案 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