Maison développement back-end C++ Les E/S de fichiers binaires sont-elles une alternative plus efficace à FileStorage pour charger de gros objets Mat OpenCV ?

Les E/S de fichiers binaires sont-elles une alternative plus efficace à FileStorage pour charger de gros objets Mat OpenCV ?

Dec 05, 2024 am 11:21 AM

Is Binary File I/O a More Efficient Alternative to FileStorage for Loading Large OpenCV Mat Objects?

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&amp; filename)
{
    ifstream fs(filename, fstream::binary);

    // Header information
    int rows, cols, type, channels;
    fs.read((char*)&amp;rows, sizeof(int));
    fs.read((char*)&amp;cols, sizeof(int));
    fs.read((char*)&amp;type, sizeof(int));
    fs.read((char*)&amp;channels, sizeof(int));

    // Data
    Mat mat(rows, cols, type);
    fs.read((char*)mat.data, CV_ELEM_SIZE(type) * rows * cols);
    return mat;
}
Copier après la connexion

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Mar 03, 2025 pm 05:52 PM

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 Gulc: Cibliothèque C construite à partir de zéro Mar 03, 2025 pm 05:46 PM

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

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS Mar 03, 2025 pm 05:53 PM

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 Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Mar 03, 2025 pm 05:53 PM

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? Où est la valeur de retour de la fonction de langue C stockée en mémoire? Mar 03, 2025 pm 05:51 PM

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

Utilisation distincte et partage de phrases Utilisation distincte et partage de phrases Mar 03, 2025 pm 05:51 PM

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Mar 12, 2025 pm 04:52 PM

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

Comment fonctionne la bibliothèque de modèle standard C (STL)? Comment fonctionne la bibliothèque de modèle standard C (STL)? Mar 12, 2025 pm 04:50 PM

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

See all articles