项目需要将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);

最新文章

  1. MySQL - 问题集 - &quot;Got error 28 from storage engine&quot;
  2. 两个平行div之间有间隙
  3. 54-locate 简明笔记
  4. Android源码分析之MessageQueue
  5. dropdownlist 控件的判断
  6. android 在标题栏加上按钮
  7. int、bigint、smallint 和 tinyint
  8. 使用ibatis时 sql中 in 的参数赋值
  9. uval 6657 GCD XOR
  10. requests和BeautifulSoup
  11. dpdk-18.11网卡多队列RSS设置
  12. spring boot 与 spring cloud 关系
  13. 项目:《ssh框架综合项目开发视频》-视频目录和第六天的EasyUI简单讲解
  14. Comparable接口和Comparator接口的不同用法
  15. classifier in maven
  16. 昂达 v891 v1 终于 删除 windows 分区 并且恢复了容量。
  17. html中img图片居中
  18. [USACO 07DEC]Best Cow Line, Gold
  19. 【读书笔记】iOS-网络-负载
  20. MySQL的left on 【zt】

热门文章

  1. day28 import,from * import *,__name__
  2. thinkphp 页面Trace信息
  3. 「STL」bitset正传
  4. 牛客多校第六场 A Garbage 模拟/签到
  5. 尚学python课程---13、python基础语法
  6. Android Butterknife使用方法总结
  7. springboot跨域访问
  8. MyBatis的查询
  9. 牛客网NOIP赛前集训营-普及组(第七场)
  10. docker上安装ActiveMQ