2015-02-10 106 views
2

我試圖運行此教程中的代碼 - Pose Estimation「太多值解壓」與solvePnPRansac() - 姿態估計

,我得到了下面的錯誤,呼籲solvePnPRansac功能後:

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

ValueError: too many values to unpack

根據文檔:

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

有沒有人處理過這個問題?

(Python 2.7版,OpenCV的3B)

+0

這段代碼工作如果你在Python 2.7下運行它? – chris 2015-02-11 02:38:42

+0

對不起,我的不好,它的python 2.7和opencv 3。 – Guy 2015-02-11 21:45:45

回答

5

異常說有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]