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

Comment convertir efficacement un tapis OpenCV en tableau ou en vecteur ?

Susan Sarandon
Libérer: 2024-10-29 08:21:30
original
414 Les gens l'ont consulté

How to Efficiently Convert OpenCV Mat to Array or Vector?

Conversion d'OpenCV Mat en tableau/vecteur

Problème :
Pour les débutants en OpenCV, trouver des fonctions adaptées convertir Mat en Array peut être difficile. Les méthodes existantes telles que .ptr et .at peuvent ne pas fournir le format de données souhaité.

Réponse :

Pour les tapis continus (où toutes les données sont stockées consécutivement), les données peut ê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>
Copier après la connexion

Pour les tapis non continus, les données doivent être extraites 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>
Copier après la connexion

Mise à jour :

Pour plus de simplicité, l'utilisation de std::vector est recommandée :

<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

Pour les types de données autres que CV_8UC1 (par exemple, CV_32F), utilisez les données appropriées tapez la définition du vecteur.

Mise à jour 2 :

Concernant la continuité des données Mat :

  • Matrices créées par imread(), clone( ), ou les constructeurs sont toujours continus.
  • Les tapis non continus n'apparaissent que lors de l'emprunt de données à des matrices existantes, sauf lorsque les données empruntées sont continues dans la matrice d'origine (par exemple, des lignes simples ou des lignes pleine largeur).

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