How to access slices of a 3d matrix in OpenCV
c, matrix, opencv
Solution
An alternative, vector-based solution:
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);
}
Problem
I would like to store 592 47x47 arrays into a 47x47x592 Matrix. I created the 3d Matrix as follows: ``` int sizes[] = {47,47,592}; Mat 3dmat(3, sizes, CV_32FC1); ``` I then thought I could access it by using a set of ranges as in the following. ``` 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); ``` However, when I try to use the copyTo function to input an existing data set, it does not work. ``` data.copyTo(2dmat); //data is my 47x47 matrix ``` The 3d matrix does not get updated when I do this. Any information is appreciated! Thanks! edit: I store the 592 matrices in this 3d matrix so that I can then later access each of the individual 47x47 matrices in another loop. So I would later do something of this sort: ``` 2dmat = 3dmat(ranges); 2dmat.copyTo(data); ``` So I would then perform some operations using this data matrix. And in the next iteration of the loop, I would use the next stored data matrix.