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