2011-06-27 4 views
1

Je suis nouveau à OpenCV et j'essaie de créer un tableau à n dimensions et d'accéder à chaque élément en utilisant CvMatND.Accéder aux éléments de cvCreateMatND

Je peux accéder à une matrice 2D par des données [i * step + j * nChannels + 0], comment puis-je accéder aux éléments d'une matrice créée par

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

Merci

+1

Vous n'avez pas défini matA dans ce contexte. Et aussi: quels sont les éléments auxquels vous essayez d'accéder? La structure CvMatND semble assez vaste. –

Répondre

2

J'ai examiné et testé ma réponse précédente, et comme vous l'avez découvert, il n'était pas exact.

Ceci est le code de travail pour itérer sur tous les éléments d'un tableau 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); 
     } 
    } 
} 
Questions connexes