'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+ 是否反映了相同的行为。
我正在尝试 运行 本教程中的代码 - 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+ 是否反映了相同的行为。