Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > OpenCV
OpenCV Vos questions sur l'API de traitement d'images OpenCV.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2012, 10h43   #1
Nouveau Membre du Club
 
Stagiaire R&D
Inscription : janvier 2008
Messages : 136
Détails du profil
Informations professionnelles :
Activité : Stagiaire R&D
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2008
Messages : 136
Points : 37
Points : 37
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 :
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];
Shargat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 10h58   #2
Membre éprouvé
 
Homme
Chercheur en informatique
Inscription : avril 2008
Messages : 272
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Chercheur en informatique

Informations forums :
Inscription : avril 2008
Messages : 272
Points : 451
Points : 451
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...
math_lab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 10h58   #3
Membre régulier
 
Homme
Étudiant
Inscription : 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
Points : 96
Points : 96
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.
romanzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2012, 16h53   #4
Membre régulier
 
Avatar de GabrielD
 
Homme Gabriel
ingénieur de recherche
Inscription : août 2009
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Gabriel
Localisation : France

Informations professionnelles :
Activité : ingénieur de recherche

Informations forums :
Inscription : août 2009
Messages : 50
Points : 75
Points : 75
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".
GabrielD est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h01.


 
 
 
 
Partenaires

Hébergement Web