C++与Matlab混合编程之:矩阵数据结构
项目需要将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);
最新文章
- MySQL - 问题集 - ";Got error 28 from storage engine";
- 两个平行div之间有间隙
- 54-locate 简明笔记
- Android源码分析之MessageQueue
- dropdownlist 控件的判断
- android 在标题栏加上按钮
- int、bigint、smallint 和 tinyint
- 使用ibatis时 sql中 in 的参数赋值
- uval 6657 GCD XOR
- requests和BeautifulSoup
- dpdk-18.11网卡多队列RSS设置
- spring boot 与 spring cloud 关系
- 项目:《ssh框架综合项目开发视频》-视频目录和第六天的EasyUI简单讲解
- Comparable接口和Comparator接口的不同用法
- classifier in maven
- 昂达 v891 v1 终于 删除 windows 分区 并且恢复了容量。
- html中img图片居中
- [USACO 07DEC]Best Cow Line, Gold
- 【读书笔记】iOS-网络-负载
- MySQL的left on 【zt】