Comment accéder aux tranches d’une masortingce 3D dans OpenCV

Je souhaite stocker 592 tableaux 47×47 dans une masortingce 47x47x592. J’ai créé la masortingce 3D comme suit:

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

J’ai alors pensé que je pouvais y accéder en utilisant un ensemble de plages comme dans la suite.

 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); 

Cependant, lorsque j’essaie d’utiliser la fonction copyTo pour saisir un jeu de données existant, cela ne fonctionne pas.

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

La masortingce 3D n’est pas mise à jour lorsque je le fais.

Toute information est appréciée! Merci!

edit: Je stocke les 592 masortingces dans cette masortingce 3D afin de pouvoir ensuite accéder ultérieurement à chacune des masortingces 47×47 individuelles dans une autre boucle. Donc je ferais plus tard quelque chose de ce genre:

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

Donc, je voudrais ensuite effectuer certaines opérations en utilisant cette masortingce de données. Et lors de la prochaine itération de la boucle, j’utiliserais la prochaine masortingce de données stockée.

Une solution alternative à base de vecteur:

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

En définissant la taille appropriée de la tranche, vous devriez être prêt à partir:

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

Maintenant, la tranche contient votre tranche 2D.