目录
1. 线性代数库:Eigen
1.1. 安装
在Ubuntu的终端输入
sudo apt-get install libeigen3-dev
1.2. 核心:< Core >
1.2.1. 基本操作
包含头文件
#include<Eigen/Core>
using namespace Eigen;
可在C++环境中实现矩阵的各种运算,类似于MATLAB。引用之后就可以如下进行使用了。
Matrix<float,2,3> m23; //创建float类型2x3的矩阵
Matrix<double,Dynamic,Dynamic> m; //创建double类型的动态矩阵
Matrix5d m5; //创建double类型的5x5矩阵
Vector3d v3; //创建double类型的3x1矩阵
Vector3f v3f; //创建float类型的3x1矩阵
Matrix3d::Zero(); //3x3全零阵
Matrix3d::Random(); //3x3随机阵
Matrix3d::Identity(); //3x3单位阵
MatrixXd::Random(3,4); //3x4随机阵
m23 << 1,2,3,4,5,6; //初始化矩阵成为[1,2,3;4,5,6]
cout << m23(1,2); //打印m23的第1行第2列的元素,为2
cout << m23; //打印矩阵m23
m = m23.cast<double>() * v3; //矩阵相乘,维度和类型必须合理
m = 10 * v3; //数乘
m23.transpose(); //转置
m23.sum(); //全元素和
m23.trace(); //迹,对角线元素的和
m3.inverse(); //逆
m23.determinant(); //行列式
1.2.2. 特征值
特征值的求解是通过构建求解对象实现的
SelfAdjointEigenSolver<Matrix5d> es(m5);
cout << es.eigenvalues();
cout << es.eigenvectors();
1.2.3. 解方程Ax=b
当然可以直接求逆解,也可以采用QR分解求解。
Matrix<double,5,5> A;
Vector5d b;
Vector5d x;
x = A.inverse() * b; //直接求逆
x = A.colPivHouseholderQr().solve(b); //QR分解求
1.3. 几何:< Geometry >
1.3.1. 基本操作
包含头文件
#include<Eigen/Geometry>
using namespace Eigen;
使用
Vector3d v;
Matrix3d rm;
AngleAxis rv( M_PI/4 , Vector3d(0,0,1) ); //创建旋转向量,即角轴
Quaterniond q = Quaterniond(rv); //四元数
rv.matrix(); //旋转向量的矩阵形式
rm = rv.toRotationMatrix(); //旋转向量 转换为 旋转矩阵
cout<<q.coeffs().transpose(); //输出四元数,最后一位为实部
v = rm * v; //旋转
v = rv * v; //旋转
1.4. 参考内容
- 《视觉SLAM十四讲》
2. 图像处理算法库:OpenCV
2.1. 安装
首先安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
之后从网站https://opencv.org/download.html/ 下载用于Linux的OpenCV,若下载得到的是opencv-4.5.3.zip,则调用以下程序来安装它
sudo make install opencv-4.5.3.zip
2.2. 操作
2.2.1. 基本操作
包含头文件
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.cpp>
图像读取和操作
cv::Mat image; //创建图像
cv::Mat image1(10,10,CV_8UC3); //自定义图像
image = cv::imread("./1.png"); //从某个路径读取图像
cv::imshow("Good Picture",image); //显示图像
cv::Mat image1(image); //克隆
image.cols; //图像宽,单位像素个数
image.rows; //图像高,单位像素个数
image.channels(); //图像通道数,灰度则为单通道,彩色则为RGB三通道,还可彩色+透明度即RGBA四通道
image.type(); //图像类型,常见CV_ 8\16\32\64 UC 1\2\3 表示1\2\3通道,各通道用unsigned int型的8\16\32\64 表示各通道的数值bit数。例如CV_8UC1表示单通道且为8bit,即0-255表示灰度值
if(image.type() != CV_8UC2)
return 0;
2.2.2. 像素读取
2.3. 参考内容
- 《视觉SLAM十四讲》
- OpenCV常用库函数
- 【OpenCV】访问Mat图像中每个像素的值