将 cv::Mat 的旋转和平移连接到特征值
concatenate a rotation and a translation of cv::Mat to a eigen
我正在使用 OpenCV 中给出的 RANSAC 进行 6 自由度变换,我现在想将 cv::Mat 的两个矩阵转换为 Eigen 的 Isometry3d,但我没有找到关于这个问题的好例子。
例如
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.
有人帮帮我吗?谢谢
本质上,您需要一个 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));
您需要确保 rot
和 trsl
确实保存了 double
数据(也许考虑改用 cv::Mat_<double>
)。
我正在使用 OpenCV 中给出的 RANSAC 进行 6 自由度变换,我现在想将 cv::Mat 的两个矩阵转换为 Eigen 的 Isometry3d,但我没有找到关于这个问题的好例子。
例如
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.
有人帮帮我吗?谢谢
本质上,您需要一个 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));
您需要确保 rot
和 trsl
确实保存了 double
数据(也许考虑改用 cv::Mat_<double>
)。