Eigen入门系列 —— Eigen::Matrix常用数据类型及初始化

Eigen入门系列 —— Eigen::Matrix常用数据类型及初始化


前言

随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。

为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。

后续会逐步扩增与工业机器视觉相关的一些其它内容,如:

项目案例剖析场景数据分析基础算法模块相机评测 等;

如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。

在这里插入图片描述


程序说明

展示Eigen::Matrix常用数据类型及初始化;

输出结果

在这里插入图片描述

代码示例

/*
 * @File: data_types.cpp
 * @Brief: eigen course
 * @Description: 展示Eigen::Matrix常用数据类型及初始化
 * @Version: 0.0.1
 * @Author: MuYv
 */
#include <iostream>
#include <Eigen/Dense>



int main(int argc, char** argv){
    
    
    // Eigen::Matrix为模板类,可自由定义不同维度的矩阵,
    // 此处仅展示较为常用的几种数据类型,其它定制化需求类型的使用,可以此类推;

    // 自定义创建5x5的矩阵,模板参数依次为:数据类型,行数,列数;
    Eigen::Matrix<float, 5, 5> matrix_5f;
    // 使用 [-1,1] 范围之间的随机数进行初始化填充;
    matrix_5f = Eigen::Matrix<float,5,5>::Random();
    // Eigen::Matrix重载了 ‘<<’ 运算符,可以直接输出矩阵数据;
    std::cout<<"matrix_5f random init:\n"<<matrix_5f<<std::endl<<std::endl;

    // 定义行列大小未知的矩阵
    Eigen::MatrixXf matrix_xf;
    const int kRowNum = 4;
    const int kColNum = 3;
    // 根据运行时变量值,设置矩阵大小
    matrix_xf.resize(kRowNum,kColNum);
    // 使用常数值进行初始化填充;
    matrix_xf = Eigen::MatrixXf::Constant(kRowNum,kColNum,6);
    // 输出当前矩阵的行数和列数
    std::cout<<"matrix_xf size: "<<matrix_xf.rows()<<" rows, "<<matrix_xf.cols()<<" cols."<<std::endl;
    std::cout<<"matrix_xf constant init:\n"<<matrix_xf<<std::endl<<std::endl;

    // 常用数据类型
    // 2x1 列向量
    Eigen::Vector2f vector_2f(1.0f, 2.0f);
    std::cout<<"vector_2f:\n"<<vector_2f<<std::endl<<std::endl;

    // 3x1 列向量
    Eigen::Vector3f vector_3f(1.0f, 2.0f, 3.0f);
    std::cout<<"vector_3f:\n"<<vector_3f<<std::endl<<std::endl;

    // 4x1 列向量
    Eigen::Vector4f vector_4f = Eigen::Vector4f::Random();
    std::cout<<"vector_4f:\n"<<vector_4f<<std::endl<<std::endl;

    // 3x3 矩阵
    Eigen::Matrix3f matrix_3f;
    // 初始化为单位阵
    matrix_3f = Eigen::Matrix3f::Identity();
    std::cout<<"matrix_3f:\n"<<matrix_3f<<std::endl;
    // 数值填充初始化
    matrix_3f << 1,2,3,
                 4,5,6,
                 7,8,9;
    std::cout<<"matrix_3f:\n"<<matrix_3f<<std::endl<<std::endl;

    // 4x4 矩阵
    Eigen::Matrix4f matrix_4f;
    // 初始化为全1矩阵
    matrix_4f = Eigen::Matrix4f::Ones();
    std::cout<<"matrix_4f:\n"<<matrix_4f<<std::endl<<std::endl;

    // 若所需类型为双精度double,则只需将对应的f改为d即可
    // 4x4 矩阵,元素类型为double,初始化为全0矩阵
    Eigen::Matrix4d matrix_4d = Eigen::Matrix4d::Zero();
    std::cout<<"matrix_4d:\n"<<matrix_4d<<std::endl<<std::endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/memorynode/article/details/124534276