Maison > développement back-end > C++ > le corps du texte

Comment convertir un tapis OpenCV en tableau ou vecteur ?

Barbara Streisand
Libérer: 2024-10-27 14:12:29
original
246 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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!