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 :

Accès aux éléments d'une IplImage définie en float


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Accès aux éléments d'une IplImage définie en float
    Bonjour,

    Je suis entrain de programmer un filtre sous OpenCV. Pour cela, j'utilise la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    IplImage * filter(IplImage * a){
    	int width = a->width;
    	int height = a->height;
    	IplImage * b = cvCreateImage(cvSize(height,width),IPL_DEPTH_32F,1);
    	int astep = a->widthStep;
    	int bstep = b->widthStep;
    	int achannels = a->nChannels;
    	int bchannels = b->nChannels;
    	float * bdata = (float*) b->imageData;
    	float * adata = (float*) a->imageData;
    	for(int i=0;i<height;i++)for(int j=0;j<width;j++)
    		bdata[i*bstep+j*bchannels] = adata[i*astep+j*achannels]*VAL;
    	return b;
    }
    (Ne vous inquiétez pas pour VAL qui n'est pas défini, j'ai juste simplifié mon code pour en venir à l'essentiel, VAL est un float)

    Mon problème est que je n'accède visiblement pas aux éléments correctement, car j'ai une erreur de segmentation au cours de la boucle appliquant le filtre. Mon image "a" est elle aussi définie en float (IPL_DEPTH_32F)

    Pourriez-vous me dire ce que je ne fais pas correctement?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Une petite inversion : cvSize(height,width) cvSize(width,height).

    Il faut faire attention ici que tu effectues le parcours avec des pointeurs de type float, le "step" retourné par widthStep doit donc être divisé par 4.
    Tu peux aussi effectuer un parcours "classique" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i=0;i<height;i++)
        for(j=0;j<width;j++)
            data[i*width+j]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup, c'était bien cela, il fallait utiliser width ou widthStep/4 pour les floats!

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

Discussions similaires

  1. accès aux éléments d'une structure
    Par titou35 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/03/2009, 09h23
  2. Accès aux éléments d'une image
    Par Nates dans le forum OpenCV
    Réponses: 24
    Dernier message: 01/08/2008, 14h56
  3. Réponses: 0
    Dernier message: 31/08/2007, 20h38
  4. Accès aux éléments d'une structure
    Par licorne dans le forum Pascal
    Réponses: 1
    Dernier message: 15/02/2007, 17h44
  5. accès aux éléments d'une enum
    Par aymeric__ dans le forum C++
    Réponses: 6
    Dernier message: 17/08/2006, 21h17

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