项目需要将matlab代码写成C++,准备用opencv。opencv中矩阵的存储与matlab有所不同,应注意以下问题:

1、matlab中矩阵是按照列优先存储的。对于n0*n1*...*nn维的矩阵,具体存储方式是:(a0(0),a1(0),...,an(0)),(a0(1),a1(0),...an(0)), (a0(n0),a1(0),...an(0)),(a0(0),a1(1),a2(0),...an(0)),...(a0(0),a1(0),...,an(nn)).即先遍历a0,再遍历a1,a2,...,an.

2、opencv中矩阵的存储方式是行优先的,与matlab相反。

3、对于三维矩阵,在opencv中我常使用一个多通道的二维矩阵代替。如创建一个100*10*20的矩阵:

Mat a(100,10,CV_32SC(20));

也可以直接创建一个三维矩阵:

int sz[]={100,10,20};

Mat a(sz,CV_32S);

4、对于遍历矩阵的操作,尽量使矩阵元素在内存中连续。我常使用下面的方法遍历矩阵:

double *data=(double *)a.data;

for(int i=0;i<a.rows;++i){

for(int j=0;j<a.cols;++j){

*(data++)=........

}

}

5、矩阵的初始化

opencv新建一个矩阵后并不会自动初始化,如果需要初始化需要自行操作。opencv提供了setTo函数:

//初始化一个32通道的矩阵,第32通道初始化为1,其他通道初始化为0

Mat a(100,100,CV_32SC(32));

Vec<int,32>val;

val=0;

val[31]=1;

a.setTo(val);

C++与Matlab混合编程之:矩阵数据结构的更多相关文章

  1. C++混合编程之idlcpp教程Python篇(9)

    上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...

  2. C++混合编程之idlcpp教程Lua篇(9)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程LuaTutorial7中除了四个文件LuaTutorial7.c ...

  3. C++混合编程之idlcpp教程Python篇(8)

    上一篇在这 C++混合编程之idlcpp教程Python篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial6中,同样加入了四个文件:Pyt ...

  4. C++混合编程之idlcpp教程Lua篇(8)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程LuaTutorial6中,同样加入了四个文件:LuaTutori ...

  5. C++混合编程之idlcpp教程Python篇(7)

    上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...

  6. C++混合编程之idlcpp教程Lua篇(7)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与LuaTutorial4工程相似,工程LuaTutorial5中,同样加入了四个文件: ...

  7. C++混合编程之idlcpp教程Python篇(6)

    上一篇在这 C++混合编程之idlcpp教程Python篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程PythonTutorial4中加入了四个文件:PythonTutorial4 ...

  8. C++混合编程之idlcpp教程Lua篇(6)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程LuaTutorial4中加入了四个文件:LuaTutorial4.cpp, Tut ...

  9. C++混合编程之idlcpp教程Python篇(5)

    上一篇在这  C++混合编程之idlcpp教程Python篇(4) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial3中,同样加入了三个文件:Py ...

随机推荐

  1. echarts renderItem-在区间段内展示连续数据

    一.需求背景: 贴图说明:要求数据在不同类型的区间段内展示. 二.实现思路及代码 实现方法: 利用echarts的自定义配置:option.series[i].type='custom'中的rende ...

  2. [CTSC 2012]熟悉的文章

    二分+单调队列优化dp+后缀自动机 //CTSC2012 熟悉的文章 #include <bits/stdc++.h> using namespace std; const int max ...

  3. Hadoop 与 Spark 对比

    Hadoop进行海量数据分析,MR频繁落地,IO操作,计算时间就拉长.由于这种设计影响,计算过程中不能进行迭代计算.造成网络节点数据传输. Spark从理念上就开始改变.应用scala特点解决上面的核 ...

  4. System.Web.Mvc.ActionResult.cs

    ylbtech-System.Web.Mvc.ActionResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Publi ...

  5. iOS开发之SceneKit框架--SCNParametricGeometry.h

    1.SCNParametricGeometry简介 SCNParametricGeometry用于创建简单的3D模型,比如SCNPlane 平面.SCNPyramid 锥形(金字塔).SCNBox 立 ...

  6. STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据

    当出现这个问题时,往往是因为你没有在RCC寄存器中把相关的时钟使能打开. 配置寄存器之前记得调用"RCC_AxxxPeriphClockCmd"先打开需要配置的时钟源,别调用了“R ...

  7. PAT甲级——A1113 Integer Set Partition

    Given a set of N (>) positive integers, you are supposed to partition them into two disjoint sets ...

  8. Spring - JUnit整合测试

    1.导包:test.jar - (依赖 aop.jar) 2.使用@RunWith注解创建spring容器 - @RunWith(SpringJUnit4ClassRunner.class) 3.使用 ...

  9. LeetCode 8.字符串转换整数 (atoi)(Python3)

    题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...

  10. tomcat下面部署多个项目

    最近需要部署多个项目,我目前所知道的两种方法,第一种是一个tomcat部署一个项目,需要布置多个tomcat就可以部署多个项目.第二种就是一个tomcat下面部署多个项目. 首先我们先来说说两种的优劣 ...