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) { ... }
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
Notes supplémentaires
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; }
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!