关于“cameraMatrix”不是数字元组的cv2.stereocalibrate()错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于“cameraMatrix”不是数字元组的cv2.stereocalibrate()错误相关的知识,希望对你有一定的参考价值。
我正在研究估计立体相机的距离。我正在使用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'(位置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)但是省略它们会导致我的错误。第一个问题仍然存在。
我感谢您的帮助
Masud Saber
这是我猜的版本问题。当我使用Opencv 3.3.1时,我遇到了同样的问题,但是当我改为2.4.13时它解决了。
以上是关于关于“cameraMatrix”不是数字元组的cv2.stereocalibrate()错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用函数的返回值作为在python中返回元组的while条件