Heim > Backend-Entwicklung > C++ > Wie kann ich große OpenCV-Matten effizient laden?

Wie kann ich große OpenCV-Matten effizient laden?

Susan Sarandon
Freigeben: 2024-12-02 00:24:09
Original
226 Leute haben es durchsucht

How Can I Efficiently Load Large OpenCV Mats?

Effizientes Laden großer Matten in OpenCV: Eine umfassende Anleitung

Beim Umgang mit umfangreichen speicherintensiven Mattenobjekten wird die Effizienz beim Laden erhöht von größter Bedeutung. Obwohl die FileStorage-Methode von OpenCV einen unkomplizierten Ansatz bietet, reicht sie möglicherweise nicht immer aus.

Alternative: Laden von Binärdaten

Für eine deutlich verbesserte Leistung sollten Sie erwägen, Mat-Objekte zu speichern und zu laden ein rohes Binärformat. Dadurch wird der mit FileStorage verbundene Overhead umgangen, was zu erheblichen Zeiteinsparungen führt.

Implementierung mit Matwrite- und Matread-Funktionen

Um das binäre Laden zu implementieren, verwenden Sie die Funktionen Matwrite und Matread:

void matwrite(const string& filename, const Mat& mat) { ... }
Mat matread(const string& filename) { ... }
Nach dem Login kopieren

Leistung Vergleich

Benchmarks zeigen einen großen Unterschied in der Ladegeschwindigkeit zwischen FileStorage und binärem Laden:

Using FileStorage: 5523.45 ms
Using Raw:         50.0879 ms

Using FileStorage: (out of memory)
Using Raw:         197.381 ms
Nach dem Login kopieren

Zusätzliche Hinweise

  • Leistungsmessungen sollten im Release-Modus und nicht im Debug-Modus durchgeführt werden.
  • Speicherbeschränkungen können das Laden großer Dateien verhindern Mats verwenden FileStorage, während binäres Laden eine praktikable Lösung darstellt.

Codebeispiel

Der folgende Code demonstriert die Verwendung von matwrite und matread zum Speichern, Laden, und Leistungstests:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>

using namespace std;
using namespace cv;

int main() {
    // Save randomly generated data
    Mat m(1024*256, 192, CV_8UC1);
    randu(m, 0, 1000);

    matwrite("raw.bin", m);

    // Load saved matrix
    double tic = getTickCount();
    Mat m1 = matread("raw.bin");

    // Calculate loading time
    double toc = (getTickCount() - tic) * 1000. / getTickFrequency();
    cout << "Using Raw: " << toc << " ms" << endl;
}
Nach dem Login kopieren

Durch den Einsatz des binären Ladens für große Mat-Objekte können Sie die Effizienz erheblich steigern, die Ladezeiten verkürzen und so Ihre Leistung optimieren OpenCV-Anwendungen für optimale Leistung.

Das obige ist der detaillierte Inhalt vonWie kann ich große OpenCV-Matten effizient laden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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