Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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

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
C++ 如何用OpenCV计算两帧间的旋转平移矩阵_C++_Opencv - Fatal编程技术网

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。我应该使用哪个函数?是二维到二维还是二维到三维?我脑子里还不清楚。稍后,我将计算每个像素在现实世界中的位置,但这是下一步。