Heim > Backend-Entwicklung > C++ > Hauptteil

Wie konvertiere ich ein Mat-Objekt in ein Array oder einen Vektor in OpenCV?

Barbara Streisand
Freigeben: 2024-10-26 13:48:02
Original
192 Leute haben es durchsucht

How to Convert a Mat Object to an Array or Vector in OpenCV?

Mat in Array in OpenCV konvertieren

OpenCV bietet verschiedene Methoden zum Konvertieren zwischen verschiedenen Datenstrukturen. In diesem Artikel konzentrieren wir uns auf die Konvertierung von einem Mat-Objekt in ein Array oder einen Vektor.

Direkte Konvertierung von Mat in Array

Für eine kontinuierliche Mat, wo Die Daten werden zusammenhängend im Speicher gespeichert, Sie können direkt auf die Daten als 1D-Array zugreifen:

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

Konvertierung in 2D-Array

Für eine nicht kontinuierliche Mat , können Sie seine Daten Zeile für Zeile abrufen und in einem 2D-Array speichern:

<code class="cpp">cv::Mat mat;
// ...
std::vector<std::vector<uchar>> array(mat.rows);
for (int i = 0; i < mat.rows; ++i) {
    array[i] = std::vector<uchar>(mat.cols * mat.channels());
    array[i] = mat.ptr<uchar>(i);
}</code>
Nach dem Login kopieren

Konvertierung in Vektor

Wenn Sie den Vektor der C-Standardbibliothek verwenden, können Sie kann den folgenden Ansatz verwenden:

<code class="cpp">cv::Mat mat;
// ...
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

Mat-Datenkontinuität

Es ist erwähnenswert, dass die Kontinuität einer Mat die Effizienz des Datenzugriffs beeinflusst. Von imread(), clone() oder einem Konstruktor erstellte Matrizen sind normalerweise kontinuierlich. Umgekehrt sind Matrizen, die aus einem ROI (Region of Interest) einer größeren Matte erstellt wurden, möglicherweise nicht kontinuierlich.

Dieser Codeausschnitt zeigt die Unterschiede in der Datenkontinuität:

<code class="cpp">cv::Mat big_mat = cv::Mat::zeros(1000, 1000, CV_8UC3);
cv::Mat sub_mat = big_mat(cv::Rect(10, 10, 100, 100));

std::cout << "big_mat is continuous: " << big_mat.isContinuous() << std::endl; // true
std::cout << "sub_mat is continuous: " << sub_mat.isContinuous() << std::endl; // false</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein Mat-Objekt in ein Array oder einen Vektor in OpenCV?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!