问题描述:
在做相机位姿估计时用到这个函数:cv2.solvePnPRansac
python中该函数原型为:
cv2.solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, minInliersCount[, inliers[, flags]]]]]]]]) → rvec, tvec, inliers
因此在调用该函数时,起先是这么写的:
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)
然而,这么写的话,会报如题所示的错误:alueError: too many values to unpack
解决方法:
其实在OpenCV3的python接口中,发生了一些变化,函数原型应该为:
solvePnPRansac(...)
solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, confidence[, inliers[, flags]]]]]]]])
-> retval, rvec, tvec, inliers
它还会返回一个retval值,这个值一般用不到,所以你在使用这个函数时,可以像如下这么写:
_, rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)
或者你仅仅想用最后的三个返回元素,可以如下这么写:
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)[:-3]
以上两个写法都是正确的,这样就不会再报错误了~问题解决!