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