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