将cv :: Mat的旋转和平移连接到一个特征

时间:2017-05-19 07:46:04

标签: opencv transformation eigen3

我正在使用OpenCV中给出的RANSAC进行6-dof转换,我现在想将cv :: Mat的两个矩阵转换为Eigen的Isometry3d,但我没有找到关于这个问题的好例子。 / p>

e.g。

cv::Mat rot;
cv::Mat trsl;
// the rot is 3-by-3 and trsl is 3-by-1 vector.

Eigen::Isometry3d trsf;

trsf.rotation = rot; 
trsf.translation = trsl;  // I know trsf has two members but it seems not the correct way to do a concatenation.

有人帮我一把吗?感谢。

1 个答案:

答案 0 :(得分:1)

基本上,您需要Eigen::Map来阅读opencv数据并将其存储到trsf的部分内容中:

typedef Eigen::Matrix<double, 3, 3, Eigen::RowMajor> RMatrix3d;

Eigen::Isometry3d trsf;
trsf.linear() = RMatrix3d::Map(reinterpret_cast<const double*>(rot.data));
trsf.translation() = Eigen::Vector3d::Map(reinterpret_cast<const double*>(trsl.data));

您需要确保rottrsl确实包含double数据(可能考虑使用cv::Mat_<double>代替)。