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.