【发布时间】:2020-06-26 22:26:35
【问题描述】:
我在连续帧之间有正确对应关系,并且需要估计它们之间的转换以生成轨迹。下面的C++流水线,生成的轨迹就没意义了。
auto EssentialMatrix = cv::findEssentialMat(points_previous,
points_current,
camera_focal_length,
camera_principal_point,
cv::RANSAC,
0.999,
1.0,
mask);
auto inliers = cv::recoverPose(EssentialMatrix,
points_previous,
points_current,
CameraMatrix,
R,
t,
mask);
t_pos_ = t_pos_ + 1.0 *(R_pos_*t);
R_pos_ = R * R_pos_;
所以,我的问题是:如何正确使用 C++ OpenCV 实用程序恢复两个连续帧之间的转换?是否需要额外的步骤来执行此操作?
【问题讨论】:
-
你能展示你的工作python代码吗?什么是 R_pos_ 和 t_pos_?它们是如何初始化的?
-
所以第一次调用后 R 和 R_pos_ 以及 t 和 t_pos_ 相等?你能尝试从你的python代码中分离出相同的功能部分吗?你没有在 python 中使用 opencv 来完成这项任务吗?
-
你没有扭曲这些观点吗? stackoverflow.com/questions/31290414/…
-
如果 python 和 C++ 管道做的一样,你能尝试比较中间结果吗?可能 findEssentialMat 或 recoverPose 会为您的 python 功能提供不同的结果,或者输入不同。如果可以隔离问题,请尝试在实现中找到差异(也许参数必须以不同的方式使用?也许 opencv 优化降低了质量?)
标签: c++ opencv visual-odometry