Dans OpenCV, obtenir des données à partir d'un objet Mat peut être un défi pour les débutants. Cet article explore le processus de conversion d'un Mat en tableau ou en vecteur.
Conversion directe
Si la mémoire du Mat est continue, la conversion directe en tableau 1D est possible :
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
Conversion ligne par ligne
Pour les tapis non continus, un accès ligne par ligne est nécessaire pour créer 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>
Approche simplifiée avec std::vector
Pour std::vector, la conversion devient plus simple :
<code class="cpp">std::vector<uchar> array; if (mat.isContinuous()) { 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>
Données Considérations sur la continuité
La continuité des données Mat garantit que toutes les données sont contiguës en mémoire.
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!