cv2.stereocalibrate()有关" cameraMatrix"的错误不是数字元组

时间:2016-09-20 13:20:26

标签: python opencv camera calibration

我正致力于估算立体相机的距离。我正在使用python 2.7.11和OpenCV 3.1版本。我分别校准每个摄像头并找到内在参数。问题是,当我以OpenCV文档中所述的方式使用cv2.stereocalibtare()函数时,我得到错误:" TypeError:cameraMatrix1不是数字元组"。

代码如下所示:

stereo_criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 100, 1e-5)
ret_stereo, R, T, E, F = cv2.stereoCalibrate(objpointsL, imgpointsL, imgpointsR, grayL.shape[::-1],mtxL, distcoeffL, mtxR, distcoeffR, criteria=stereo_criteria, flags=cv2.CALIB_FIX_INTRINSIC)

我认为使用tuple()函数将相机矩阵更改为元组可能会有效。它没有改变任何东西。然后我认为问题可能是我使用的opencv的版本所以我将其改为2.4.13,但这并没有改变任何东西。在所有这些尝试之后,我想我让stereocalibrate()做了相机矩阵和失真系数估计本身,没有任何单一的相机校准。

代码看起来像这样:

stereo_criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 100, 1e-5)
stereocalib_retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objpointsL,imgpointsL,imgpointsR,grayL.shape, criteria=stereo_criteria)

但是它出错了:" TypeError:必需的参数' distCoeffs1' (pos 5)未找到" 我无法弄清楚为什么这个功能不起作用。我想要的只是计算R,T,E,F值

更新:对于最后一个错误,我尝试了这个:

stereocalib_retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objpointsL,
                                                                                                         imgpointsL,
                                                                                                         imgpointsR,
                                                                                                         mtxL,
                                                                                                         distcoeffL,
                                                                                                         mtxR,
                                                                                                         distcoeffR,
                                                                                                         image_size,
                                                                                                         criteria=stereocalib_criteria,
                                                                                                         flags=stereocalib_flags)

它有效。虽然不需要放置cameraMatrix1,distCoeffs1,cameraMatrix2,distCoeffs2(并且实际上分别等于mtxL,discoeffL,mtxR,discoeffR)但是省略它们会导致我的错误。第一个问题仍然存在。

感谢您的帮助

Masood Saber

1 个答案:

答案 0 :(得分:0)

这是我猜的版本问题。当我使用Opencv 3.3.1时,我遇到了同样的问题,但是当我改为2.4.13时它就解决了。