Python 基于OpenCV的视觉里程计
我试图在OpenCV Python中实现单目(单摄像头)视觉里程计。维基百科在这里给出了常用的方法步骤 我用Lucas Kanade跟踪器计算了光流。这里给出了代码Python 基于OpenCV的视觉里程计,python,opencv,Python,Opencv,我试图在OpenCV Python中实现单目(单摄像头)视觉里程计。维基百科在这里给出了常用的方法步骤 我用Lucas Kanade跟踪器计算了光流。这里给出了代码 Wiki上的第4步是“检查流场向量是否存在潜在的跟踪错误,并删除异常值”。如何在OpenCV(python)中实现这一点?我应该使用什么算法/函数?那么第5步和第6步呢?我在某个地方读到(见第三条评论),如果使用Lucas Kanade,Kalman滤波器在性能上不会有任何改进 至于删除有错误的向量,您应该根据calcOptical
Wiki上的第4步是“检查流场向量是否存在潜在的跟踪错误,并删除异常值”。如何在OpenCV(python)中实现这一点?我应该使用什么算法/函数?那么第5步和第6步呢?我在某个地方读到(见第三条评论),如果使用Lucas Kanade,Kalman滤波器在性能上不会有任何改进 至于删除有错误的向量,您应该根据calcOpticalFlowPyrLK返回的状态过滤关键点。以下代码可以帮助您完成此操作:
def featureTracking(image_ref, image_cur, px_ref):
kp2, st, err = cv2.calcOpticalFlowPyrLK(image_ref, image_cur, px_ref, None, **lk_params) # shape: [k,2] [k,1] [k,1]
st = st.reshape(st.shape[0])
kp1 = px_ref[st == 1]
kp2 = kp2[st == 1]
return kp1, kp2
对于步骤5和6,找到基本矩阵并使用它估计姿势(openCV函数findesentialmat
和recoverPose
)