访问cvCreateMatND的元素

我是OpenCV的新手,我正在尝试创建一个n维数组并使用CvMatND访问每个元素。

我可以通过数据[i * step + j * nchannels + 0]访问2D矩阵,如何访问由

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

谢谢

我已经审查并测试了我以前的答案,因为你发现它不准确。

这是迭代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:%dy:%dz:%d --> %f\n", x, y, z, value); } } } 

您可以at(idx[])使用type为图像的数据类型,使用idx[]作为索引数组。 例如,要访问CV_32F类型的3D矩阵M的第2行,第3列和第4通道,您可以执行以下操作:

 int idx[3] = {2,3,4}; float x = M.at(idx);