C++ 如何用OpenCV计算两帧间的旋转平移矩阵
我想用C++ 如何用OpenCV计算两帧间的旋转平移矩阵,c++,opencv,C++,Opencv,我想用OpenCV计算两帧之间的旋转平移矩阵[R | t]矩阵(请参阅) 我知道我必须: 1) 检测两个帧上的功能(例如,使用SURF) 2) 匹配功能(例如,使用ORB和bMatcher) 3) 计算[R | t]矩阵。固有参数是已知的 但是,我不知道如何使用OpenCV完成第三步。有没有一种常规/简单的方法可以做到这一点 我的目标是计算摄像机的轨迹。您需要使用RANSAC计算基本矩阵或基本矩阵 OpenCV很好地提供了这样做的功能 然后就是从本质参数矩阵a和基本矩阵F中获取[R | t]。关
OpenCV
计算两帧之间的旋转平移矩阵[R | t]矩阵(请参阅)
我知道我必须:
1) 检测两个帧上的功能(例如,使用SURF
)2) 匹配功能(例如,使用
ORB
和bMatcher
)3) 计算[R | t]矩阵。固有参数是已知的 但是,我不知道如何使用
OpenCV
完成第三步。有没有一种常规/简单的方法可以做到这一点
我的目标是计算摄像机的轨迹。您需要使用RANSAC计算基本矩阵或基本矩阵 OpenCV很好地提供了这样做的功能
然后就是从本质参数矩阵
a
和基本矩阵F
中获取[R | t]
。关于这方面的更多信息,我想请你参考 在旋转和平移矩阵分别为R&T的情况下,可以简单地使用stereoCalibrate。对象点、l\U图像点、r\U图像点对象和左/右图像帧中匹配点/特征的坐标。
立体校准(对象点、l图像点、r图像点、LcameraMatrix、LDistcoefs、RcameraMatrix、RDistcoefs、图像大小、r、T、E、F) 假设您正在处理二维到二维的对应关系,您是否尝试过
cv::findHomography()
?我使用的是RGB+D相机,因此我知道每个像素的深度。然而,我尝试了cv::findHomography(),但返回的结果似乎很奇怪。我可能错过了什么findHomography()
获取vector
源点和目标点,并查找将源点映射到目标点的3x3投影矩阵。我强烈建议对findHomography()
使用带有默认参数的RANSAC方法。因为它接受的点是二维的,所以它们完全忽略深度。对于二维到三维的对应,您需要solvePnP()
或solvePnPRANSAC()
,但首先您必须知道目标在三维对象坐标空间中的实际坐标。对于RGB+D相机,如果我假设我的初始位置是(x=0,y=0,z=0),并且z始终等于0。我应该使用哪个函数?是二维到二维还是二维到三维?我脑子里还不清楚。稍后,我将计算每个像素在现实世界中的位置,但这是下一步。