Maison >développement back-end >C++ >Comment puis-je accélérer le chargement d'objets de tapis volumineux dans 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
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!