Heim > Backend-Entwicklung > C++ > Wie konvertiert man eine OpenCV-Mat in ein Array oder einen Vektor?

Wie konvertiert man eine OpenCV-Mat in ein Array oder einen Vektor?

Barbara Streisand
Freigeben: 2024-10-27 14:12:29
Original
368 Leute haben es durchsucht

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

OpenCV Mat in Array/Vektor konvertieren

In OpenCV kann das Abrufen von Daten aus einem Mat-Objekt für Anfänger eine Herausforderung sein. In diesem Artikel wird der Prozess der Konvertierung einer Mat in ein Array oder einen Vektor untersucht.

Direkte Konvertierung

Wenn der Speicher der Mat kontinuierlich ist, ist eine direkte Konvertierung in ein 1D-Array möglich :

<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels());
if (mat.isContinuous())
    array = mat.data;</code>
Nach dem Login kopieren

Reihenweise Konvertierung

Für nicht kontinuierliche Matten ist zeilenweiser Zugriff zum Erstellen eines 2D-Arrays erforderlich:

<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>
Nach dem Login kopieren

Vereinfachter Ansatz mit std::vector

Für std::vector wird die Konvertierung einfacher:

<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>
Nach dem Login kopieren

Daten Überlegungen zur Kontinuität

Die Mat-Datenkontinuität stellt sicher, dass alle Daten im Speicher zusammenhängend sind.

  • Imread(), clone() und vom Konstruktor erstellte Mats sind immer kontinuierlich.
  • Nicht-kontinuierliche Matten entstehen durch das Ausleihen von Daten aus vorhandenen Matten (z. B. Zeilen-/Spaltenauswahl).

Das obige ist der detaillierte Inhalt vonWie konvertiert man eine OpenCV-Mat in ein Array oder einen Vektor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage