matlab存储的矩阵,在C++处理的方法

来源:互联网 发布:巨人网络借壳上市绯闻 编辑:程序博客网 时间:2024/05/22 01:40

matlab生成的大小为 [ H, W, C ]  的矩阵在C++中的处理方法,需要注意的是存储习惯:

matlab矩阵的存储方式:先列,后行,最后通道数, 而

C++矩阵的存储方式:先行,后列,最后通道数。

假设matlab生成的矩阵为matData, 存储到C++的 top_data中,(需按C++行优先来存)

---该问题即是:在C++中将一个列优先存储的矩阵 转化为一个行优先存储的矩阵,其方法如下:

int   index = 0 ;

int   top_index = 0 ;

for(  int c=0; c<C; c++ )

    for( int w=0; w<W; w++ )     //// 循环按列优先写

        for( int h=0; h<H; h++  )

         {

           top_index = ( c*H + h ) *W + w ;   //// 按行优先写 

           top_data[ top_index ]  = matData[ index++] ;

          }

---------------------------------------------------------------------------

对于matlab生成的矩阵matData, 在C++中切取其中的一块matData_crop进行处理,

假设matData的高宽通道数依次为( H, W, C), 切取其中的(h1, h2),  (w1, w2) 块。

0 <  h1 < h2 < H,  0 < w1 < w2 < W. 

代码如下:

int   index = 0 ;

int   crop_index = 0 ;

for( int c=0; c<C; c++ )

    for( int w=w1; w<w2; w++ )

         for( int h=h1; h<h2; h++ )

          {

            index = (c*W + w )*H + h ;

           matData_crop[index++] = matData[index] ;

           }

--------------------------------------------------------------------

注意上述生成的matData_crop依然是按列存储的,这需要注意。

--- 以上内容属个人观点,未经过实验验证,仅供参考。