C++与Matlab混合编程之:矩阵数据结构
来源:互联网 发布:mysql删除表的字段 编辑:程序博客网 时间:2024/06/04 00:23
项目需要将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混合编程之:矩阵数据结构
- matlab与C混合编程
- matlab与c混合编程
- matlab与C混合编程
- MATLAB与C混合编程
- matlab与c混合编程
- c与matlab混合编程之dll调用
- matlab与C语言混合编程之openmp多线程
- matlab与c(c++)混合编程
- matlab与C++/C 混合编程
- C/C++与Matlab engine 混合编程
- C/C++与Matlab engine 混合编程
- Matlab与C/C++混合编程
- Matlab与C/C++混合编程
- C/C++与Matlab混合编程初探
- C/C++与Matlab混合编程初探
- C/C++与Matlab混合编程初探
- matlab与c/c++混合编程
- Java 多态 后链接(late binding)与前链接(early binding) 向上转型(upcast)
- 黑马程序员——反射
- 黑马程序员——多线程
- iis8.5配置wcf
- Python图片中的缩放实现,以及多种尺寸icon的生成
- C++与Matlab混合编程之:矩阵数据结构
- android微信支付(问题总结)
- Android沉浸式状态栏攻略
- js-Node对象属性
- CodeTyphon32中自带例子源码:取得本机IP
- Android Context 上下文 你必须知道的一切
- 10个原生JavaScript技巧
- android 自定义drawable图形(oval,ring,rectangle)
- ubuntu 14.04-64x搭建android环境