2015-11-26 74 views
3

我的工作,我需要跟蹤空中目標,並計算六個自由度的項目獲取使用cv2.solvePnP旋轉向量。的Kinect + OpenCV的:無法在python

  1. 我目前跟蹤彩色球,並計算其在rgb_frame中心,並利用中心值來查找depth_frame深度。

  2. 發現在真實世界共同ORDS的深度(Z)後,我計算真實世界X和使用等式Y:X =(Z U)/ fx和Y =(Z v)的/ fy,其中fx,fy是從kinect的內參數中獲得的焦距,u和v在這種情況下是中心的x,y值。

  3. 我治療(U,V),爲圖像點和(X,Y,Z)作爲圖像點和饋入此方法:solvePnP

    obj_pts = np.array([[X,Y,Z]],np.float64) img_pts = np.array([[u,v]],np.float64)

    ret,rvecs,tvecs = cv2.solvePnP(obj_pts,img_pts,camera_matrix2,np_dist_coefs)

我期待找到我將用作輸入的rvecs:

cv2.Rodrigues(rvecs) 

得到歐拉角,即俯仰,偏航,滾動。

我目前有與solvePnP電話,這給了我下面的錯誤問題:

/opencv-3.0.0/modules/calib3d/src/solvepnp.cpp:61:錯誤:(-215 )npoints> = 0 & & npoints ==的std :: MAX(ipoints.checkVector(2,CV_32F),ipoints.checkVector(2,CV_64F))在功能solvePnP

我也明白,僅發送該中心的對象並且不建議使用圖像點。這是我邁向實現的第一步。我打算使用像SIFT這樣的特徵檢測器來使它在後期變得更有趣。

任何人都可以請建議對我的做法,並幫助我完成找到六個自由度:

forward/back, up/down, left/right, pitch, yaw, roll

回答

1

雖然我的做法是完全正確的,我錯過了一個事實,即計算在現實座標,我們需要ATLEAST 3D對象4+像素對應的點集的方向和目標座標。

我只需要檢查圖像中有超過4個點的輪廓,並且我的代碼按預期工作,並且我能夠準確地計算6個自由度,而且現在我已經完成了更復雜,很快我就可以分享一個git鏈接到我的工作中。

我還是想聽聽,如何成功地測試方向的正確性,我能夠計算使用羅德里格公式。