Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于OpenCV的视觉里程计_Python_Opencv - Fatal编程技术网

Python 基于OpenCV的视觉里程计

Python 基于OpenCV的视觉里程计,python,opencv,Python,Opencv,我试图在OpenCV Python中实现单目(单摄像头)视觉里程计。维基百科在这里给出了常用的方法步骤 我用Lucas Kanade跟踪器计算了光流。这里给出了代码 Wiki上的第4步是“检查流场向量是否存在潜在的跟踪错误,并删除异常值”。如何在OpenCV(python)中实现这一点?我应该使用什么算法/函数?那么第5步和第6步呢?我在某个地方读到(见第三条评论),如果使用Lucas Kanade,Kalman滤波器在性能上不会有任何改进 至于删除有错误的向量,您应该根据calcOptical

我试图在OpenCV Python中实现单目(单摄像头)视觉里程计。维基百科在这里给出了常用的方法步骤 我用Lucas Kanade跟踪器计算了光流。这里给出了代码
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

阅读以下两篇文章:


你能重建opencv吗?我还是一个初学者,但我可以这么说。据我所知,去除异常值是由RANSAC算法完成的。opencv中有许多算法使用RANSAC方法,作为一个标志。我并不认为你需要自己实现所有这些东西,也许opencv中有一个为who提供的函数可能不是。我还在搜索。如果我找到了什么,我会让你知道的。