我正在尝试运行本教程中的代码 - 姿势估计,
调用函数后,我收到以下错误solvePnPRansac
:
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)
值错误:要解压缩的值太多
根据文档:
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(
为我工作
所以我遇到了同样的问题,当我打印出来时,第一个值是一个真/假值,就像原版 solvePnP 一样
我认为solvePnPRansac现在结合了两个输出,使结果成为四个项目:retval, rvec, tvec, inliers
对于最初的提问者来说显然有点晚了,但这仍然花了我很多时间才弄清楚。我正在使用Python 2.7.12和Ubuntu 16.04。我希望 Python 版本更重要,我不知道 Python 3.6+ 是否反映了相同的行为。