前言
随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。
为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。
后续会逐步扩增与工业机器视觉相关的一些其它内容,如:
项目案例剖析、场景数据分析、基础算法模块、相机评测 等;
如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。
程序说明
展示Eigen::Matrix数据的读写、访问、替换;
data()、block<rows, cols>(startRow, startCol);
输出结果
代码示例
/*
* @File: read_data.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;
// 使用常数值进行初始化填充;
matrix_5f = Eigen::Matrix<float,5,5>::Constant(0.0f);
std::cout<<"matrix_5f constant init:\n"<<matrix_5f<<std::endl;
// 使用‘(row,col)’来访问数据
matrix_5f(0,0) = 66.66f;
matrix_5f(0,4) = 88.88f;
matrix_5f(2,2) = 77.77f;
std::cout<<"matrix_5f (row,col):\n"<<matrix_5f<<std::endl;
// 使用data()访问数据
auto data = matrix_5f.data();
// 注意,Eigen中data数组在存储数值时,是以列优先存储
data[0] = 6.6f;
data[12] = 7.7f;
data[20] = 8.8f;
std::cout<<"matrix_5f data():\n"<<matrix_5f<<std::endl;
// 整体数据块替换
Eigen::Matrix3f change_block = Eigen::Matrix3f::Constant(3);
// block<rows,cols>(startRow,startCol)
matrix_5f.block<3,3>(0,0) = change_block;
std::cout<<"matrix_5f block<rows,cols>(startRow,startCol):\n"<<matrix_5f<<std::endl<<std::endl;
// 常用数据类型
// 2x1 列向量
Eigen::Vector2f vector_2f(1.0f, 2.0f);
std::cout<<"vector_2f:\n"<<vector_2f<<std::endl;
// 对于列向量,使用‘[index]’访问数据
vector_2f[0] = 6.6f;
std::cout<<"vector_2f [index]:\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;
// 对于列向量,使用‘[index]’访问数据
vector_3f[0] = 6.6f;
vector_3f[1] = 7.7f;
vector_3f[2] = 8.8f;
std::cout<<"vector_3f [index]:\n"<<vector_3f<<std::endl<<std::endl;
return 0;
}