


Les E/S de fichiers binaires sont-elles une alternative plus efficace à FileStorage pour charger de gros objets Mat OpenCV ?
Chargement efficace d'objets Mat de grande taille avec OpenCV
Le chargement d'objets Mat de grande taille en mémoire est une opération courante dans les applications de traitement d'image. Bien que la méthode FileStorage dans OpenCV soit une option simple, existe-t-il une alternative plus efficace ?
Chargement plus rapide avec le format binaire
La clé d'une efficacité améliorée réside dans la sauvegarde et chargement du Mat au format binaire. OpenCV fournit les fonctions matwrite et matread spécifiquement à cet effet.
Amélioration significative des performances
Les tests effectués sur des objets Mat de différentes tailles montrent une amélioration spectaculaire des performances lors de l'utilisation du chargement binaire. sur FileStorage. Pour une image plus petite (250 000 lignes, 192 colonnes), le chargement binaire a réduit le temps de chargement de 5,5 secondes à seulement 50 millisecondes. De même, pour une image plus grande (1 million de lignes, 192 colonnes), le chargement binaire n'a pris que 197 millisecondes, tandis que FileStorage n'a pas pu se charger en raison de limitations de mémoire.
Mise en œuvre et utilisation
La fonction matwrite prend un nom de fichier et un objet Mat en entrée, tandis que matread ne prend que le nom de fichier. Les fonctions gèrent l'en-tête nécessaire et le stockage/récupération des données au format binaire.
Exemple de code
Voici un exemple de code qui illustre les fonctions matwrite et matread :
void matwrite(const string& filename, const Mat& mat) { // Header information ofstream fs(filename, fstream::binary); fs.write((char*)&mat.rows, sizeof(int)); fs.write((char*)&mat.cols, sizeof(int)); fs.write((char*)&mat.type(), sizeof(int)); fs.write((char*)&mat.channels(), sizeof(int)); // Data if (mat.isContinuous()) { fs.write(mat.ptr<char>(0), (mat.dataend - mat.datastart)); } else { int rowsz = CV_ELEM_SIZE(mat.type()) * mat.cols; for (int r = 0; r < mat.rows; ++r) { fs.write(mat.ptr<char>(r), rowsz); } } } Mat matread(const string& filename) { ifstream fs(filename, fstream::binary); // Header information int rows, cols, type, channels; fs.read((char*)&rows, sizeof(int)); fs.read((char*)&cols, sizeof(int)); fs.read((char*)&type, sizeof(int)); fs.read((char*)&channels, sizeof(int)); // Data Mat mat(rows, cols, type); fs.read((char*)mat.data, CV_ELEM_SIZE(type) * rows * cols); return mat; }
Conclusion
Utilisation du format binaire pour le chargement de gros Placer des objets en mémoire offre une amélioration significative des performances par rapport à la méthode FileStorage. Les fonctions matwrite et matread constituent un moyen pratique et efficace de mettre en œuvre cette approche. En mettant en œuvre cette technique, vous pouvez réduire les temps de chargement et améliorer les performances de vos applications basées sur OpenCV.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Gulc: Cibliothèque C construite à partir de zéro

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?

Comment fonctionne la bibliothèque de modèle standard C (STL)?
