Maison  >  Article  >  développement back-end  >  Comment convertir un tapis OpenCV en tableau ou vecteur ?

Comment convertir un tapis OpenCV en tableau ou vecteur ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 14:12:29247parcourir

How to Convert an OpenCV Mat to an Array or Vector?

Conversion d'OpenCV Mat en tableau/vecteur

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.

  • Imread(), clone() et les tapis créés par le constructeur sont toujours continus.
  • Les tapis non continus résultent de l'emprunt de données à des tapis existants (par exemple, des sélections de lignes/colonnes).

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn