2014-05-05 158 views
-5

我正在讀取陣列中的一個64x128灰度圖像,一次一行。每個像素都是8位寬。讀操作以字節可尋址方式完成。現在我想轉換每一行並將其存儲在二維數組中。此體系結構旨在針對特定設備上的內存優化。一旦2D數組被填充,我需要逐字節地讀取它,使得每個8位位於數組的不同行中。任何人都可以提供示例代碼?將一維字節陣列轉置爲二維陣列

謝謝!

+5

到目前爲止你有什麼嘗試過?我們不只是在這裏爲你工作。我們幫助您解決您在自己的工作中遇到的問題。 – poljpocket

回答

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; 
} 
0

只是從你的陣列construct a Mat

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

或在第一名的墊子開始,讀入它的數據成員:

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

,如果你有一個一維墊,就可以只是重塑它:

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