'解包的价值太多' with solvePnPRansac() - 姿势估计

时间:2015-02-10 19:44:56

标签: python opencv

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

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

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

  

ValueError:要解压缩的值太多

根据文件:

  

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

有人处理过这个问题吗?

(Python 2.7,OpenCV 3b)

3 个答案:

答案 0 :(得分:8)

例外情况表明返回的值超过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]

答案 1 :(得分:1)

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

为我工作

答案 2 :(得分:1)

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

我认为solvePnPRansac现在将两个输出结合起来,使结果变成四项:retval, rvec, tvec, inliers

对于最初的申请者来说显然晚了很多,但这仍然让我花了很多时间来弄清楚。我将Python 2.7.12与Ubuntu 16.04结合使用。我希望Python版本更重要,但我不知道Python 3.6+是否反映了相同的行为。