2011-06-27 17 views
1

私はOpenCVを初めて使用しており、n次元配列を作成し、CvMatNDを使用して各要素にアクセスしようとしています。cvCreateMatNDの要素へのアクセス

私は私がしました

 int size[] = { 12, 12, 12 }; 
     CvMatND* matB = cvCreateMatND(3, size, CV_8U); 
     int *Data = matA->data.i; 

おかげ

+1

このコンテキストでは、matAは定義していません。また、あなたがアクセスしようとしている要素は何ですか? CvMatND構造はかなり広がりそうです。 –

答えて

2

によって作成された行列の要素にアクセスしないか、[iのステップ+ J *のnchannels + 0 *]データにより2次元マトリックスにアクセスすることができます私の前の答えを見直し、テストしました。あなたが知ったように、それは正確ではありませんでした。

これは3D配列のすべての要素を反復処理するための作業コードです。

int size[] = { 5, 5, 5 }; 
CvMatND* matA = cvCreateMatND(3, size, CV_32F); 
cvSetZero(matA); 

for (int x = 0; x < matA->dim[0].size; x++) 
{ 
    for (int y = 0; y < matA->dim[1].size; y++) 
    { 
     for (int z = 0; z < matA->dim[2].size; z++) 
     { 
      unsigned char* ptr = matA->data.ptr + ((size_t)x * matA->dim[0].step) + ((size_t)y * matA->dim[1].step) + ((size_t)z * matA->dim[2].step); 
      float value = *(float*)ptr; 

      printf("x:%d y:%d z:%d --> %f\n", x, y, z, value); 
     } 
    } 
}