将1D字节数组转换为2D数组

时间:2014-05-05 05:40:29

标签: c++ c arrays opencv

我正在读取阵列中的64x128灰度图像,一次一行。每个像素都是8位宽。读操作以字节可寻址方式完成。现在我想转置每一行并将其存储在2D数组中。该架构旨在针对特定设备进行内存优化。一旦填充了2D数组,我需要逐字节地读取它,使得8位中的每一位都位于数组的不同行中。任何人都可以提供示例代码吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您的数组中只有construct a Mat

 uchar array[w*h];
 // read bytes:
 Mat m( h, w, CV_8U, array );

或以第一名的Mat开头,并读入其数据成员:

Mat m(h, w, CV_8U);
// read into m.data

如果你有1d Mat,你可以重新塑造它:

Mat m( 1, w*h, CV_8U );
// make it 2d HxW now:
m = m.reshape(1, w); 

答案 1 :(得分:0)

样品

#include <stdio.h>
#include <string.h>

int main(void){
    unsigned char a[64*128];
    int i,r,c;
    for(i=0;i<64*128;i++){
        a[i]=i;
    }
    //not fill
    unsigned char (*b)[64][128] = (unsigned char (*)[64][128])a;
    for(r=0;r<64;++r){
        for(c=0;c<128;++c){
            printf("%i,", (*b)[r][c]);
        }
        printf("\n");
    }
    //FILL
    unsigned char b2[64][128];
    memcpy(b2, a, sizeof(b2));
    printf("\nFill ver\n");
    for(r=0;r<2;++r){
        for(c=0;c<16;++c){
            printf("%i,", b2[r][c]);
        }
        printf("\n");
    }

    return 0;
}