参考链接:
https://blog.csdn.net/chengde6896383/article/details/83448882整体概括了Eigen库中的Matrix类与OpenCV中的Mat类转换过程中的注意事项,尤其是在使用两个不同的第三方依赖库时,头文件的引入顺序很重要,其次就是转换方法。
https://blog.csdn.net/piaoxuezhong/article/details/79110421该博客对Eigen库的使用、Matrix类、Matrix和opencv中Mat的转换,以及与MATLAB中的矩阵操作进行对比,介绍非常详细,值得参考!!
1、首先包含头文件(先包含Eigen相关库,再包含opencv库)
#include #include
2、Eigen与OpenCV之间的交互(EigenOpenCV)
opencv矩阵结构为:cv::Mat,或者cv::Mat_等,当需要与eigen的矩阵结构相互转换时主要使用函数:
cv::eigen2cv和cv::cv2eigen,需要头文件:#includeopencv–>eigen:
eigen–>opencv:
补充:
eigen与matlab函数的对应关系可参考https://blog.csdn.net/piaoxuezhong/article/details/79110421
#include // 基本用法
// Eigen // Matlab // 注释
x.size() // length(x) // 向量的长度
C.rows() // size(C,1) // 矩阵的行数
C.cols() // size(C,2) // 矩阵的列数
x(i) // x(i+1) // 访问向量元素(Matlab的下标从1开始计数)
C(i,j) // C(i+1,j+1) // 访问矩阵元素
A << 1, 2, 3, // 初始化A,元素也可以是矩阵,先按列堆叠,再按行堆叠。
4, 5, 6,
7, 8, 9;
B << A, A, A; // B 是3个A水平排列
A.fill(10); // 将A的所有元素填充为10
// Eigen // Matlab 注释
MatrixXd::Identity(rows,cols) // eye(rows,cols) //单位矩阵
C.setIdentity(rows,cols) // C = eye(rows,cols) //单位矩阵
MatrixXd::Zero(rows,cols) // zeros(rows,cols) //全零矩阵
C.setZero(rows,cols) // C = zeros(rows,cols) //全零矩阵
MatrixXd::Ones(rows,cols) // ones(rows,cols) //全一矩阵
C.setOnes(rows,co