C++图像辅助工具包Eigen入门代码学习(很好的配合Opencv)

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

下面是一些代码的练习:

#include <iostream>
#include <Eigen/Dense>
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 <iostream>
#include <Eigen/Dense>
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 <Eigen/Dense>
#include <iostream>
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 <Eigen/Dense>
#include <iostream>
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 <Eigen/Core>
#include <iostream>
#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<<m.cols()<<endl;
    m<<1,2,3,4,5,6; // 这样的赋值 m(1,2,3,4,5,6)是不正确的Vector定义时才是这样的
    cout << m <<endl;
	cout<<m.col(1)<<endl;

	VectorXf v(4); // a vector of 4 float's

v[0] = 1;
v[1] = 2;
v(2) = 3;
v(3) = 4;
cout << "v:" << v << std::endl;
Vector4f v2(0,9,8,2);//这个地方写成VectorXf v2(0,9,8,2)就会报错。
cout << "v2:" << v2 << std::endl;
}

下面的这张赋值方式:注意之间用的是逗号“ ,”

#include <Eigen/Core>
#include <iostream>
#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<<endl;

}
时间: 2024-10-29 08:46:28

C++图像辅助工具包Eigen入门代码学习(很好的配合Opencv)的相关文章

netty入门代码学习

服务端代码: package com.lsp.netty; /** * @author lishupeng * @create 2017-05-27 下午 3:48 **/ import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.

问题集录--新手入门深度学习,选择TensorFlow 好吗?

新手入门深度学习,选择 TensorFlow 有哪些益处? 佟达:首先,对于新手来说,TensorFlow的环境配置包装得真心非常好.相较之下,安装Caffe要痛苦的多,如果还要再CUDA环境下配合OpenCV使用,对于新手来说,基本上不折腾个几天是很难搞定的. 其次,基于TensorFlow的教学资源非常多,中英文的都有,这对于新手也是非常有帮助的.Google做社区非常有一套,在中国有专门的一群人,会在第一时间把Google的开发者相关的进展翻译成中文. 另外,由于有Google背书,Ten

深度学习入门和学习书籍

深度学习书籍推荐: 深度学习(Deep Learning) by Ian Goodfellow and Yoshua Bengio and Aaron Courville 中文版下载地址:https://github.com/exacity/deeplearningbook-chinese R语言深度学习实践指南(Deep Learning Made Easy with R) by Dr. N.D. Lewis 下载地址:http://download.csdn.net/detail/oscer

C语言/C++编程新手入门基础学习中链接类型

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制).创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学C++能够持之以恒C++爱好群,如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组

【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

[Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感觉比较难以掌握的一个部分.Zigbee无线组网技术之所以让你感有学习难度,不是因为它真的复杂,而是它看起来很复杂,让人望而止步.另一方面则是Zigbee技术在应用层面上将硬件和软件完成融为一个体系,要求开发人员既要有扎实的硬件技术,又要有清晰的软件思维.    目前,尽管有不少关于Zigbee无线组

如何快速入门Python学习呢?

根据TIOBE最新排名 ,Python已超越C#,与Java,C,C++一起成为全球前4大最流行语言,成为互联网时代最受欢迎的编程语言,越来越多的人选择Python,那么如何快速入门Python学习呢?首先你要了解Python,我们从以下几个方面来说. 学完python前景会咋样 其实我个人是很看好python未来的就业前景的,因为我认识太多的工程师都已经在学python,很多都是月收入大几万的 一项专业调查显示,75%的受访者将Python视为他们的主要开发语言,反之,其他25%受访者则将其视

Webpack新手入门教程(学习笔记)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 30.0px Helvetica; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "PingFang TC Semibold"; color: #000000 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0

由LCS到编辑距离—动态规划入门—算法学习笔记

一切计算机问题,解决方法可以归结为两类:分治和封装.分治是减层,封装是加层. 动态规划问题同样可以用这种思路,分治. 它可以划分为多个子问题解决,那这样是不是用简单的递归就完成了?也许是的,但是这样会涉及太多的不便的操作.因为子问题有重叠! 针对这种子问题有重叠的情况的解决,就是提高效率的关键. 所以动态规划问题可以总结为:最优子结构和重叠子问题. 解决这个子问题的方式的关键就是:memoization,备忘录. 动态规划算法分以下4个步骤: 描述最优解的结构 递归定义最优解的值 按自底向上的方

(转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,<零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码,程序员的你一定能看懂的(我周围是一群狂热的Clean