#include <opencv2/core/eigen.hpp> // 这个头文件提供了转换函数
#include <opencv2/opencv.hpp>
// Eigen 转 cv::Mat, 使用 `cv::eigen2cv` 函数可以将 Eigen 的 `Matrix` 转换为 OpenCV 的 `cv::Mat`。
Eigen::Matrix<float, 2, 3> matrix_23f;
cv::eigen2cv(matrix_23f, mat_23f);
// cv::Mat 转 Eigen,使用 `cv::cv2eigen` 函数可以将 OpenCV 的 `cv::Mat` 转换为 Eigen 的 `Matrix`。
cv::Mat mat_23f(2, 3, CV_32F);
mat_23f = (cv::Mat_<float>(2, 3) <<
Eigen::Matrix<float, 2, 3> matrix_23f;
cv::cv2eigen(mat_23f, matrix_23f);
// 精度转换,在 Eigen 和 OpenCV 中,矩阵的精度(如 float 到 double)不能隐式转换,需要显式转换。
// Eigen 中的精度转换,使用 `cast<double>()` 函数将 `float` 类型的矩阵转换为 `double` 类型。
Eigen::Matrix<float, 2, 3> matrix_23f;
Eigen::Matrix<double, 2, 3> matrix_23d = matrix_23f.cast<double>();
// OpenCV 中的精度转换,使用 `convertTo` 函数将 `cv::Mat` 的精度从 `CV_32F` 转换到 `CV_64F`。
cv::Mat mat_23f(2, 3, CV_32F);
mat_23f = (cv::Mat_<float>(2, 3) <<
cv::Mat mat_23d(2, 3, CV_64F);
mat_23f.convertTo(mat_23d, CV_64F);