Я работаю над проектом, где мне требуется отслеживать воздушные объекты и вычислять шесть степеней свободы.Kinect + OpenCV: невозможно получить ротационные векторы с использованием cv2.solvePnP в python
я в настоящее время отслеживать цветные шары, и вычисляя их центр в rgb_frame, и используя значения центра, чтобы найти глубину в depth_frame.
После нахождения глубины (Z) в реальном мире со-ords, я расчета реального мира X и Y с помощью уравнений: X = (Z и)/FX и Y = (Z v)/fy, где fx, fy - фокусное расстояние, полученное из внутренних параметров kinect, а u и v в этом случае являются значениями x, y центра.
Я лечения (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 == станд :: макс (ipoints.checkVector (2, CV_32F), ipoints.checkVector (2, CV_64F)) в функции solvePnP
Я также понимаю, что передача объекта только центра и точки изображения не рекомендуются. Это мой первый шаг к реализации. Я намерен использовать детекторы функций, такие как SIFT, чтобы сделать его более интересным позже.
Может кто-нибудь пожалуйста, предложите на мой подход и помочь мне достигнуть найти шесть степеней свободы:
forward/back, up/down, left/right, pitch, yaw, roll
.