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
Susan SarandonOriginal
2024-10-29 08:21:30374Durchsuche

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>

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>

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>

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!

Stellungnahme:
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