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

Comment convertir un tapis OpenCV en tableau ou vecteur ?

Barbara Streisand
Libérer: 2024-10-27 14:12:29
original
360 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal