"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment accélérer le chargement de grands objets de tapis dans OpenCV?

Comment accélérer le chargement de grands objets de tapis dans OpenCV?

Publié le 2025-04-18
Parcourir:288

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

Chargement plus rapide de grands objets de mat dans la mémoire dans OpenCv

Bien que la méthode FileStorage dans OpenCV fournit un moyen pratique de stocker et de récupérer MAT, il peut ne pas être l'option la plus efficace pour charger de grands objets matériaux dans la mémoire. Voici plusieurs approches alternatives qui peuvent offrir des améliorations de vitesse significatives:

Format de fichiers binaires

Enregistrer et charger des objets de tapis au format binaire est un booster de performance substantiel. Les fonctions MATWrite et Matrel d'OpenCV facilitent ce processus. L'utilisation de fichiers binaires évite les frais généraux associés aux procédures de sérialisation et de désérialisation d'OpenCV, ce qui entraîne des temps de chargement beaucoup plus rapides. Utilisation de bruts: 50.0879 ms (petite image) Utilisation de FileStorage: (hors mémoire) (grande image) Utilisation de RAW: 197.381 MS (grande image)

Exemple de code

Voici un extrait de code démontrant comment utiliser MatWrite et Matread:

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)

conseils pour le chargement plus rapide

#include 
#include 
#include 

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");
}
Les mesures de performances ne doivent jamais être effectuées en mode debug, car cela ralentit significativement l'exécution du code. n'épuisez pas la mémoire disponible, surtout lorsque vous traitez de grands objets de mat.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3