访问cvCreateMatND的元素

时间:2011-06-27 13:35:52

标签: c++ c image-processing opencv matrix

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

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

创建的矩阵的元素
      int size[] = { 12, 12, 12 };
      CvMatND* matB = cvCreateMatND(3, size, CV_8U);
      int *Data = matA->data.i;

由于

2 个答案:

答案 0 :(得分:3)

我已经审核并测试了我之前的答案,因为您发现它不准确。

这是迭代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);
        }
    }
}

答案 1 :(得分:0)

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

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