Maison > développement back-end > C++ > Comment puis-je charger efficacement de grands tapis OpenCV ?

Comment puis-je charger efficacement de grands tapis OpenCV ?

Susan Sarandon
Libérer: 2024-12-02 00:24:09
original
198 Les gens l'ont consulté

How Can I Efficiently Load Large OpenCV Mats?

Chargement efficace de grands tapis dans OpenCV : un guide complet

Lorsque vous traitez des objets Mat étendus et gourmands en mémoire, l'efficacité de leur chargement devient primordial. Bien que la méthode FileStorage d'OpenCV fournisse une approche simple, elle peut ne pas toujours suffire.

Alternative : chargement de données binaires

Pour des performances considérablement améliorées, envisagez d'enregistrer et de charger des objets Mat dans un format binaire brut. Cela contourne la surcharge associée à FileStorage, ce qui entraîne un gain de temps substantiel.

Implémentation avec les fonctions matwrite et matread

Pour implémenter le chargement binaire, utilisez les fonctions matwrite et matread :

void matwrite(const string& filename, const Mat& mat) { ... }
Mat matread(const string& filename) { ... }
Copier après la connexion

Performances Comparaison

Les benchmarks révèlent une grande différence dans les vitesses de chargement entre FileStorage et le chargement binaire :

Using FileStorage: 5523.45 ms
Using Raw:         50.0879 ms

Using FileStorage: (out of memory)
Using Raw:         197.381 ms
Copier après la connexion

Notes supplémentaires

  • Les mesures de performances doivent être effectuées en mode release, et non en mode débogage.
  • Les limitations de mémoire peuvent empêcher charger de grands Mats à l'aide de FileStorage, tandis que le chargement binaire offre une solution viable.

Exemple de code

Le code suivant démontre l'utilisation de matwrite et matread pour la sauvegarde, chargement et tests de performances :

#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;
}
Copier après la connexion

En utilisant le chargement binaire pour les gros objets Mat, vous pouvez améliorer considérablement l'efficacité et réduire les temps de chargement, optimiser vos applications OpenCV pour des performances optimales.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal