Maison >développement back-end >C++ >Comment puis-je accélérer le chargement d'objets de tapis volumineux dans OpenCV ?

Comment puis-je accélérer le chargement d'objets de tapis volumineux dans OpenCV ?

DDD
DDDoriginal
2024-12-01 22:51:12124parcourir

How Can I Speed Up Loading Large Mat Objects in OpenCV?

Chargement plus rapide des objets Mat volumineux en mémoire dans OpenCV

Alors que la méthode FileStorage dans OpenCV fournit un moyen pratique de stocker et de récupérer des objets Mat , ce n'est peut-être pas l'option la plus efficace pour charger des objets Mat volumineux en mémoire. Voici plusieurs approches alternatives qui peuvent offrir des améliorations significatives de la vitesse :

Format de fichier binaire

L'enregistrement et le chargement des objets Mat au format binaire améliorent considérablement les performances. Les fonctions matwrite et matread d'OpenCV facilitent ce processus. L'utilisation de fichiers binaires évite la surcharge associée aux procédures de sérialisation et de désérialisation d'OpenCV, ce qui entraîne des temps de chargement beaucoup plus rapides.

Résultats des tests

Comparaisons des temps de chargement entre FileStorage et les formats binaires pour petites et grandes images :

Using FileStorage: 5523.45 ms (small image)
Using Raw:         50.0879 ms (small image)
Using FileStorage: (out of memory) (large image)
Using Raw:         197.381 ms (large image)

Code Exemple

Voici un extrait de code montrant comment utiliser matwrite et matread :

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

void matwrite(const std::string& filename, const cv::Mat& mat)
{
    // Save Mat object to a binary file
}

cv::Mat matread(const std::string& filename)
{
    // Load Mat object from a binary file
}

int main()
{
    // Generate random data
    cv::Mat m = cv::Mat::randu(1024*256, 192, CV_8UC1);
    
    // Save to files
    matwrite("fs.yml", m);
    matwrite("raw.bin", m);
    
    // Load from files
    cv::Mat m1 = matread("fs.yml");
    cv::Mat m2 = matread("raw.bin");
}

Conseils pour un chargement plus rapide

  • Évitez le mode débogage : Les mesures de performances ne doivent jamais être effectuées en mode débogage, car cela ralentit considérablement l'exécution du code.
  • Vérifiez la disponibilité de la mémoire : Assurez-vous que la méthode FileStorage n'épuise pas la mémoire disponible, en particulier lorsqu'il s'agit de gros objets Mat.
  • Considérez le format binaire : Le format de fichier binaire offre des améliorations de vitesse exceptionnelles, en particulier pour les gros objets Mat.

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!

Déclaration:
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