设为首页 加入收藏

TOP

C++图像辅助工具包Eigen入门代码学习(很好的配合Opencv)
2015-07-20 17:36:16 来源: 作者: 【 】 浏览:3
Tags:图像 辅助工具 Eigen 入门 代码 学习 配合 Opencv

首先要说这个工具包非常的方便,解压出来就可以用了。在工程里面加入这个文件夹的路径就可以了。


下面是一些代码的练习:


#include 
  
     
#include 
   
     using namespace Eigen; using namespace std; int main() { MatrixXd m = MatrixXd::Random(3,3); MatrixXd n; n=MatrixXd::Constant(3,3,1.2); //这是一个3*3的矩阵,里面的值全部是1。2 cout << "n =" << endl << n << endl; m = (m + MatrixXd::Constant(3,3,1.2)) * 50; cout << "m =" << endl << m << endl; VectorXd v(3); v << 1, 2, 3; // 以下的结果说明是列向量3*1的。 cout << "m * v =" << endl << m * v << endl; return 0; } 
   
  

下面会用到转置:

#include 
  
     
#include 
   
     using namespace Eigen; int main() { Matrix2d mat; mat << 1, 2, 3, 4; Vector2d u(-1,1), v(2,0); std::cout << "Here is mat*mat:\n" << mat*mat << std::endl; std::cout << "Here is mat*u:\n" << mat*u << std::endl; std::cout << "Here is u^T*mat:\n" << u.transpose()*mat << std::endl; //可以看出来.transpose()用来求转置 std::cout << "Here is u^T*v:\n" << u.transpose()*v << std::endl; std::cout << "Here is u*v^T:\n" << u*v.transpose() << std::endl; std::cout << "Let's multiply mat by itself" << std::endl; mat = mat*mat; std::cout << "Now mat is mat:\n" << mat << std::endl; } 
   
  

下面的例子是从一个矩阵当中取出一个子矩阵(注意两种方式是一样的。转载的那篇论文里面这里说错了。)


#include 
  
     
#include 
   
     using namespace std; int main() { Eigen::MatrixXf m(4,4); m << 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16; cout << "Block in the middle" << endl; // 两种不同的方式 cout << m.block<2,3>(1,1) << endl << endl; cout << "other kind Block in the middle" << endl; cout << m.block(1,1,2,3) << endl << endl; for (int i = 1; i <= 3; ++i) { cout << "Block of size " << i << "x" << i << endl; cout << m.block(0,0,i,i) << endl << endl; } } 
   
  

下面是向量的一些操作:

#include 
  
     
#include 
   
     using namespace std; int main() { Eigen::ArrayXf v(6); v << 1, 2, 3, 4, 5, 6; cout << "v.head(3) =" << endl << v.head(3) << endl << endl; cout << "v.tail<3>() = " << endl << v.tail<3>() << endl << endl; v.segment(1,4) *= 2; cout << "after 'v.segment(1,4) *= 2', v =" << endl << v << endl; //这里选出第2和第5个数来分别的*2 Eigen::VectorXf v1(6); //可以看出来是一样的 v1 << 1 ,2 ,2 , 4, 5, 6; cout << "v1.head(3) =" << endl << v1.head(3) << endl << endl; cout << "v.tail<3>() = " << endl << v1.tail<3>() << endl << endl; v1.segment(1,4) *= 2; cout << "after 'v.segment(1,4) *= 2', v =" << endl << v1 << endl; } 
   
  

下来看一下基本的赋值情况:

#include 
  
   
#include 
   
     #define SIZE 2 using namespace std; using namespace Eigen; void main() { MatrixXi m(SIZE,SIZE+1); // a (size)x(size+1)-matrix of int's cout<
    
     
下面的这张赋值方式:注意之间用的是逗号“ ,”

#include 
      
       
#include 
       
         #define SIZE 2 using namespace std; using namespace Eigen; void main() { int rows=5, cols=5; MatrixXf m(rows,cols); m << (Matrix3f() << 1, 2, 3, 4, 5, 6, 7, 8, 9).finished(),//不一样的赋值方式e .finished() is used to get the actual matrix object once the comma initialization of our temporary submatrix is done. MatrixXf::Zero(3,cols-3),//用0来填补 MatrixXf::Zero(rows-3,3), MatrixXf::Identity(rows-3,cols-3);//用单位矩阵来填补最下面的矩阵 cout << m<
        
         


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 1078 - Steam Roller(最短路.. 下一篇UVA 10735 混合图的欧拉回路+输出..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)