zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    关于pem与ppk格式的密钥的相互转换
    关于linux免密登录的配置及ssh客户端基于私钥文件的登录
    关于yum update和yum upgrade的区别
    Golang文件操作整理
    整理那些用于基本生存的shell命令
    Docker command line 学习笔记
    关于fork
    tips for using shortcuts
    chapter2
    使用MarkDown的编辑器
  • 原文地址:https://www.cnblogs.com/goodluckcwl/p/5686118.html
Copyright © 2011-2022 走看看