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

Wie konvertiert man OpenCV Mat effizient in Array oder Vektor?

Susan Sarandon
Freigeben: 2024-10-29 08:21:30
Original
379 Leute haben es durchsucht

How to Efficiently Convert OpenCV Mat to Array or Vector?

OpenCV Mat in Array/Vector konvertieren

Problem:
Für Anfänger in OpenCV geeignete Funktionen finden Die Konvertierung von Mat in Array kann eine Herausforderung sein. Bestehende Methoden wie .ptr und .at liefern möglicherweise nicht das gewünschte Datenformat.

Antwort:

Für kontinuierliche Mats (wo alle Daten nacheinander gespeichert werden) sind die Daten kann direkt als 1D-Array abgerufen werden:

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

Für nicht kontinuierliche Matten müssen die Daten Zeile für Zeile extrahiert werden, was zu einem 2D-Array führt:

<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

Update:

Zur Vereinfachung wird die Verwendung von std::vector empfohlen:

<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

Für andere Datentypen als CV_8UC1 (z. B. CV_32F) verwenden Sie die entsprechenden Daten Geben Sie die Vektordefinition ein.

Update 2:

Bezüglich Mat-Datenkontinuität:

  • Matrizen erstellt von imread(), clone( ) oder Konstruktoren sind immer kontinuierlich.
  • Nicht kontinuierliche Matten entstehen nur, wenn Daten aus vorhandenen Matrizen entlehnt werden, außer wenn die entlehnten Daten in der Originalmatrix kontinuierlich sind (z. B. einzelne Zeilen oder Zeilen voller Breite).

Das obige ist der detaillierte Inhalt vonWie konvertiert man OpenCV Mat effizient in Array oder 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