Mat in ein Array oder einen Vektor in OpenCV konvertieren
Bei OpenCV-Matrixoperationen besteht gelegentlich die Notwendigkeit, Mat in ein Array oder einen Vektor umzuwandeln . Dieser Artikel bietet eine umfassende Anleitung zum Erreichen solcher Konvertierungen unter Nutzung der robusten Funktionalität von OpenCV.
Direkte Konvertierung in ein Array
Wenn das Mat-Objekt mat über kontinuierlichen Speicher verfügt, können seine Daten dies tun 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>
Konvertierung in zeilenbasiertes Array
In Fällen, in denen der Speicher nicht kontinuierlich ist, können die Daten zeilenweise abgerufen werden nach Zeile, 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>
Alternative Vektorkonvertierung
Die Verwendung von std::vector bietet einen alternativen Ansatz zum Konvertieren von Mat in ein Array:
<code class="cpp">std::vector<uchar> array; if (mat.isContinuous()) { // array.assign(mat.datastart, mat.dataend); // May cause issues for sub-matrices 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>
Konvertieren in Vektoren anderer Typen
Für OpenCV Mats mit anderen Datentypen, wie z. B. CV_32F, ist der Konvertierungsprozess ähnlich:
<code class="cpp">std::vector<float> array; if (mat.isContinuous()) { // array.assign((float*)mat.datastart, (float*)mat.dataend); // May cause issues for sub-matrices array.assign((float*)mat.data, (float*)mat.data + mat.total() * mat.channels()); } else { for (int i = 0; i < mat.rows; ++i) { array.insert(array.end(), mat.ptr<float>(i), mat.ptr<float>(i) + mat.cols * mat.channels()); } }</code>
Mat-Datenkontinuität verstehen
Es ist entscheidend, die Mat-Datenkontinuität zu verstehen, um Konvertierungen effektiv durchführen zu können. Wichtige zu beachtende Punkte sind:
Das obige ist der detaillierte Inhalt vonWie konvertiert man OpenCV Mat effizient in ein Array oder einen Vektor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!