Convertir Mat en tableau ou vecteur dans OpenCV
Dans les opérations matricielles OpenCV, il est parfois nécessaire de convertir Mat en tableau ou en vecteur . Cet article fournit un guide complet pour réaliser de telles conversions, en utilisant la fonctionnalité robuste d'OpenCV.
Conversion directe en tableau
Si l'objet Mat possède une mémoire continue, ses données peuvent être directement récupéré sous forme de tableau 1D :
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
Conversion en tableau basé sur des lignes
Dans les cas où la mémoire n'est pas continue, les données peuvent être obtenues en ligne par ligne, ce qui donne un tableau 2D :
<code class="cpp">uchar **array = new uchar*[mat.rows]; for (int i = 0; i < mat.rows; ++i) array[i] = new uchar[mat.cols * mat.channels()]; for (int i = 0; i < mat.rows; ++i) array[i] = mat.ptr<uchar>(i);</code>
Conversion vectorielle alternative
L'utilisation de std::vector offre une approche alternative pour convertir Mat en tableau :
<code class="cpp">std::vector<uchar> array; if (mat.isContinuous()) { // array.assign(mat.datastart, mat.dataend); // May cause issues for sub-matrices array.assign(mat.data, mat.data + mat.total() * mat.channels()); } else { for (int i = 0; i < mat.rows; ++i) { array.insert(array.end(), mat.ptr<uchar>(i), mat.ptr<uchar>(i) + mat.cols * mat.channels()); } }</code>
Conversion en vecteurs d'autres types
Pour les tapis OpenCV avec d'autres types de données, tels que CV_32F, le processus de conversion est similaire :
<code class="cpp">std::vector<float> array; if (mat.isContinuous()) { // array.assign((float*)mat.datastart, (float*)mat.dataend); // May cause issues for sub-matrices array.assign((float*)mat.data, (float*)mat.data + mat.total() * mat.channels()); } else { for (int i = 0; i < mat.rows; ++i) { array.insert(array.end(), mat.ptr<float>(i), mat.ptr<float>(i) + mat.cols * mat.channels()); } }</code>
Comprendre la continuité des données Mat
Il est crucial de comprendre la continuité des données Mat pour effectuer efficacement des conversions. Les points clés à noter sont :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!