Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问cvCreateMatND的元素_C++_C_Image Processing_Opencv_Matrix - Fatal编程技术网

C++ 访问cvCreateMatND的元素

C++ 访问cvCreateMatND的元素,c++,c,image-processing,opencv,matrix,C++,C,Image Processing,Opencv,Matrix,我是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数组的

我是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:%d y:%d z:%d --> %f\n", x, y, z, value);
        }
    }
}
int size[]={5,5,5};
CvMatND*matA=cvCreateMatND(3,尺寸,CV_32F);
cvSetZero(matA);
对于(int x=0;xdim[0]。大小;x++)
{
对于(int y=0;ydim[1]。大小;y++)
{
对于(intz=0;zdim[2]。大小;z++)
{
无符号字符*ptr=matA->data.ptr+((大小)x*matA->dim[0]。步长)+((大小)y*matA->dim[1]。步长)+((大小)z*matA->dim[2]。步长);
浮动值=*(浮动*)ptr;
printf(“x:%d y:%d z:%d-->%f\n”,x,y,z,值);
}
}
}
您可以将
at(idx[])
与图像的数据类型和
idx[]
索引数组一起使用。例如,要访问
CV_32F
类型的3D矩阵
M
的第2行、第3列和第4频道,您可以执行以下操作:

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

您没有在此上下文中定义matA。还有:您试图访问的元素是什么?CvMatND结构似乎相当庞大。