IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Différence entre accéder au pixel par Mat::data ou Mat::at


Sujet :

OpenCV

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut Différence entre accéder au pixel par Mat::data ou Mat::at
    Bonjour,

    Ma question porte sur OpenCV2.3, et la différence entre l'utilisation de Mat::data et Mat::at<T> pour accéder à un pixel de l'image.
    En effet, les deux lignes suivantes me permettent d'accéder à la même valeur. Je me demandais donc s'il y avait une différence entre l'utilisation de l'une ou de l'autre méthode (la documentation que j'ai pu trouver est assez pauvre sur ce point). Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Mat* myFRame;
     
    ... // Initialisation de myFrame 
     
    myFrame->at<Vec3b>(x, y)[0]; // Accès au composant du channel 0 du pixel (x, y)
    myFrame->data[y*myFrame->step+x*myFrame->channels() + 0];

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Par défaut
    Je pense qu'utiliser "at" diminue la possibilité d'erreurs (du genre dépassement de tableau). Utiliser "data" est probablement mieux si tu veux faire un gros traitement par bloc du genre memcpy. Je pense que c'est aussi un poil plus efficace de parcourir les données en faisant une simple incrémentation du pointeur plutôt que de refaire tout le calcul a chaque fois (ce que "at" fait).
    Mais franchement, tant que tu sais ce que tu fais, je pense pas que ça ait une grosse importance...

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 84
    Par défaut
    Salut,

    Je n'en suis pas sur a 100% mais je dirais que la deuxième est plus rapide car elle lit directement dans un tableau tandis que la première fait appel à la fonction at.
    Sur de long calcul (avec des boucles sur beaucoup d'images) ça peut faire une différence. Si c'est juste quelques fois, il n'y a pas de difference.

  4. #4
    Membre éclairé Avatar de GabrielD
    Homme Profil pro
    ingénieur de recherche
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur de recherche

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    Je confirme que l’accès aux données d'une matrice via "at" est plus lent. Il est déstiné, je suppose, plus à des preuves de concepts ou à des petits calculs que à du temps réel.
    Il est également possible d'accéder avec la method "ptr". Celle-ci permet également de travailler sur une "region of interest", ce que ne fait pas "data".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/02/2010, 11h25
  2. Réponses: 1
    Dernier message: 09/09/2008, 19h35
  3. Différence entre 2 pixels trop grande ou très petite
    Par chana4 dans le forum Traitement d'images
    Réponses: 14
    Dernier message: 27/02/2008, 20h46
  4. Réponses: 4
    Dernier message: 13/02/2007, 10h08
  5. [Xquery]différence entre data() et string()
    Par mamiberkof dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 10/01/2007, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo