Kinect&x2B;OpenCV:无法在python中使用cv2.solvePnP获取旋转向量
我正在做一个项目,我需要跟踪空中物体并计算六自由度Kinect&x2B;OpenCV:无法在python中使用cv2.solvePnP获取旋转向量,python,opencv,openni,openkinect,Python,Opencv,Openni,Openkinect,我正在做一个项目,我需要跟踪空中物体并计算六自由度 我目前正在跟踪彩色球,计算它们在rgb_帧中的中心,并使用中心值来查找深度_帧中的深度 在找到真实世界坐标系中的深度(Z)后,我使用方程计算真实世界的X和Y:X=(Zu)/fx和Y=(Zv)/fy,其中fx,fy是从kinect的固有参数获得的焦距,在这种情况下,u和v是中心的X,Y值 我将(u,v)视为像点,将(X,Y,Z)视为像点,并将其输入到这个方法中:solvePnP obj_pts=np.array([[X,Y,Z]],np.floa
obj_pts=np.array([[X,Y,Z]],np.float64)
img\u pts=np.array([[u,v]],np.float64)
ret、rvecs、tvecs=cv2.solvePnP(obj、img、摄像机矩阵2、np距离系数)
cv2.Rodrigues(rvecs)
得到欧拉角,即俯仰角、偏航角、横摇角
我目前在solvePnP调用中遇到问题,导致以下错误:
/opencv-3.0.0/modules/calib3d/src/solvepnp.cpp:61:错误:(-215)npoints>=0&&npoints==std::max(函数solvepnp中的ipoints.checkVector(2,CV_32F),ipoints.checkVector(2,CV_64F))
我也知道不建议只发送中心的对象和图像点。这是我实现目标的第一步。我打算稍后使用像SIFT这样的特征检测器使它更有趣
有谁能建议我的方法并帮助我找到六个自由度:
前/后、上/下、左/右、俯仰、偏航、滚动
虽然我的方法完全正确,但我忽略了一个事实,即要计算真实坐标中3D对象的方向,我们需要像素和对象坐标中至少4+个对应的点集
我只需要检查图像中超过4个点的轮廓,我的代码按预期工作,我能够准确地计算出6个自由度,而且现在我已经使它更加复杂,很快我就可以共享到我的工作的git链接
我仍然想听到,如何成功地测试方向的正确性,我能够使用罗德里格斯公式计算