cv2.stereocalibrate() 关于 "cameraMatrix" 不是数字元组的错误
cv2.stereocalibrate() error about "cameraMatrix" not being a numerical tuple
我正在估算立体相机的距离。我正在使用 python 2.7.11 和 OpenCV 3.1 versions.I 分别校准每个相机并找到内在参数。问题是,当我按照 OpenCV 文档中所述的方式使用 cv2.stereocalibtare() 函数时,出现错误:"TypeError: cameraMatrix1 is not a numerical tuple".
代码如下所示:
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: Required argument 'distCoeffs1' (pos 5) not found"
我只是不明白为什么这个功能不起作用。我只想计算 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),但省略它们对我来说是错误的。第一个问题依然存在
感谢您的帮助
马苏德军刀
估计是版本问题。我用Opencv 3.3.1的时候也有同样的问题,换成2.4.13就解决了。
我正在估算立体相机的距离。我正在使用 python 2.7.11 和 OpenCV 3.1 versions.I 分别校准每个相机并找到内在参数。问题是,当我按照 OpenCV 文档中所述的方式使用 cv2.stereocalibtare() 函数时,出现错误:"TypeError: cameraMatrix1 is not a numerical tuple".
代码如下所示:
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: Required argument 'distCoeffs1' (pos 5) not found" 我只是不明白为什么这个功能不起作用。我只想计算 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),但省略它们对我来说是错误的。第一个问题依然存在
感谢您的帮助
马苏德军刀
估计是版本问题。我用Opencv 3.3.1的时候也有同样的问题,换成2.4.13就解决了。