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>
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>
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>
Daten Überlegungen zur Kontinuität
Die Mat-Datenkontinuität stellt sicher, dass alle Daten im Speicher zusammenhängend sind.
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!