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就解决了。