2015-11-13 62 views
5

私はPython 2.7とopencv 3.0.0を使用しています。 私はライブビデオで姿勢推定をしようとしています。 私はopencvによって与えられたcalibrate.pyを使用しました。それは良い作品です。 このプログラムでは、軸をポーズするために情報を扱う最後の行を追加しました。 _, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs)は、行の先頭に_,を追加:私は代わりにこれを書いたsolvePnPRansac機能付きラインでhttp://docs.opencv.org/master/d7/d53/tutorial_py_pose.html#gsc.tab=0solvePnPRansac関数を使用しているエラー

:私はこれを使用していました。

このエラーが表示されています。

error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\matrix.cpp:2294: error: (-215) d == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) in function cv::_OutputArray::create 

全くわかりません!

誰かが私を助けることができますか?ここで

は、ビデオを治療するために私のコードです:

cap = cv2.VideoCapture(0) 

while(1): 


    # Take each frame 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 

    # Find the chess board corners 
    ret, corners = cv2.findChessboardCorners(gray, (6,5),None) 

    if ret: 

     term = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1) 

     corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),term) 


     _, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs) 

     imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, camera_matrix, dist_coefs) 


     frame = draw(frame,corners2,imgpts) 

    cv2.imshow('img',frame) 

    k = cv2.waitKey(5) & 0xFF 
    if k == 27: 
     break 
cap.release() 
cv2.destroyAllWindows() 
+0

で詳細を見つけることができますか? –

答えて

2

だと思います。 solvePnPRansacの代わりにsolvePnPを使用しましたが、正常に動作しました。 私はPythonのsolvePnPRansacはバグがあると思います。

0

solvePnpRansacはわずか3つの出力値を持っています

OutputArray  rvec, 
OutputArray  tvec, 
OutputArray  inliers = noArray(), 

ので、初めに_,が再びプログラムを動作させる必要があります取り除きます。

+0

それは私にとってはうまくいかなかった。私は得る:rvec、tvec、inliers = cv2.solvePnPRansac(objp、コーナー2、K、D) cv2.error:C:\ builds \ master_PackSlaveAddon-win64-vc12-静的\ opencv \ modules \ core \ src \ matrix.cpp :2355:エラー:(-215)d == 2 &&(size [0] == 1 || sizes [1] == 1 || sizes [0] * sizes [1] == 0) :_OutputArray :: create –

0

この例では、obj_pointsを同じ方法で定義する必要があります。 私は、提供されたコードスニペットでobj_points定義が表示されていないと私はそれは私が同じ問題を抱えていた問題

obj_points= np.zeros((6*7,3), np.float32) 
obj_points[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2) 
0

solvePnPとsolvePnPRansacの3Dモデルポイント定義には違いがあります。 Is not clear in the documentationであるが、solvePnPは、3xN/Nx3の寸法の行列で定義されたモデルを必要とし、solvePnPRansacは、3x1xN/Nx1x3の寸法の行列を持つモデルを必要とする。

あなたのモデルに余分な次元を含めるには、このコードを使用することができます:

modelNx1x3 = np.zeros((N, 1, 3), np.float32) 
modelNx1x3[:, 0, :] = modelNx3[:, :] 

また、あなたが解決策を見つけた、the issue tracker in githubここで同じ

関連する問題