繁体   English   中英

Kinect + OpenCV:无法在python中使用cv2.solvePnP获取旋转向量

[英]Kinect + OpenCV : Unable to fetch rotational vectors using cv2.solvePnP in python

我正在开展一个项目,我需要跟踪空中物体并计算六个自由度。

  1. 我目前正在跟踪彩球,并在rgb_frame中计算它们的中心,并使用中心值来查找depth_frame中的深度。

  2. 在真实世界中找到深度(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

虽然我的方法完全正确,但我错过了在实际坐标中计算3D对象方向的事实,我们需要在像素和对象坐标中至少有4个以上的对应点集。

我只需检查图像中有超过4个点的轮廓,并且我的代码按预期工作,我能够准确地计算6自由度,而且到现在我已经使它更加复杂,很快我将能够分享我工作的git链接。

我仍然想听听,如何成功地测试我能够使用罗德里格斯公式计算的方向的正确性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM