如何在OpenCV中访问3d矩阵的切片

时间:2014-06-02 15:46:07

标签: c opencv matrix

我想将592个47x47阵列存储到47x47x592矩阵中。我按如下方式创建了3d Matrix:

int sizes[] = {47,47,592};
Mat 3dmat(3, sizes, CV_32FC1);

然后我想我可以通过使用一组范围来访问它。如下所示。

Range ranges[3];
ranges[0] = Range::all();
ranges[1] = Range::all();
ranges[2] = Range(x,x+1) //within a for loop.
Mat 2dmat = 3dmat(ranges);

但是,当我尝试使用copyTo函数输入现有数据集时,它不起作用。

data.copyTo(2dmat); //data is my 47x47 matrix

执行此操作时,3d矩阵不会更新。

感谢任何信息!谢谢!

编辑:我将592个矩阵存储在这个3d矩阵中,以便稍后我可以访问另一个循环中的每个47x47矩阵。所以我稍后会做这样的事情:

2dmat = 3dmat(ranges);
2dmat.copyTo(data);

然后我会使用这个数据矩阵执行一些操作。在循环的下一次迭代中,我将使用下一个存储的数据矩阵。

2 个答案:

答案 0 :(得分:4)

另一种基于矢量的解决方案:

std::vector<cv::Mat> mat(592, cv::Mat(47, 47, CV_32FC1)); // allocates 592 matrices sized 47 by 47
for(auto &m: mat) {
    // do your processsing here
    data.copyTo(m);
}

答案 1 :(得分:1)

通过设置切片的正确大小,你应该好好去:

cv::Mat slice = mat3D(ranges).clone();
cv::Mat mat2D;
mat2D.create(2, &(mat3D.size[0]), mat3D.type());
slice.copySize(mat2D);

现在切片包含您的2D切片。