'Too many values to unpack' 使用 solvePnPRansac() - 姿态估计

'Too many values to unpack' with solvePnPRansac() - Pose Estimation

我正在尝试 运行 本教程中的代码 - Pose Estimation

调用 solvePnPRansac 函数后出现以下错误:

rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)

ValueError: too many values to unpack

根据文档:

Python: cv2.solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, minInliersCount[, inliers[, flags]]]]]]]]) → rvec, tvec, inliers

有人处理过这个问题吗?

(Python 2.7, OpenCV 3b)

异常表示返回的值超过 3 个。 OpenCV3 已经改变了很多方法签名,不幸的是没有真正记录它。我检查了 solvepnp.cpp 并且签名为:

bool cv::solvePnPRansac(InputArray _opoints, InputArray _ipoints,
                    InputArray _cameraMatrix, InputArray _distCoeffs,
                    OutputArray _rvec, OutputArray _tvec, bool useExtrinsicGuess,
                    int iterationsCount, float reprojectionError, double confidence,
                    OutputArray _inliers, int flags)

这似乎表明什么都没有改变。但是,在 python:

solvePnPRansac(...)
solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, confidence[, inliers[, flags]]]]]]]]) 
-> retval, rvec, tvec, inliers

所以尝试一下可能会有所帮助:

_, rvecs, tvecs, inliers  = cv2.solvePnPRansac(objp, corners2, mtx, dist)

或者如果您只想解压最后 3 个元素:

rvecs, tvecs, inliers  = cv2.solvePnPRansac(objp, corners2, mtx, dist)[:-3]

_, rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)

对我有用

所以我遇到了同样的问题,当我打印出来时,第一个值是一个 True/False 值,就像 vanilla solvePnP

一样

我认为 solvePnPRansac 现在结合了两个输出,使结果有四项:retval, rvec, tvec, inliers

显然对于最初的提问者来说有点晚了,但这仍然让我花了很多时间才弄明白。我正在使用 Python 2.7.12 和 Ubuntu 16.04。我希望 Python 版本更重要,我不知道 Python 3.6+ 是否反映了相同的行为。