我正在尝试运行本教程中的代码 - 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 ,内部
有人处理过这个问题吗?
(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)
Run Code Online (Sandbox Code Playgroud)
这似乎表明没有任何改变.但是,在python中:
solvePnPRansac(...)
solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, confidence[, inliers[, flags]]]]]]]])
-> retval, rvec, tvec, inliers
Run Code Online (Sandbox Code Playgroud)
所以尝试一下可能会有所帮助:
_, rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)
Run Code Online (Sandbox Code Playgroud)
或者如果您只想解压缩最后3个元素:
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)[:-3]
Run Code Online (Sandbox Code Playgroud)