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

2D Java Discussion :

[Info][Graphisme]histogramme à partir d'une image


Sujet :

2D Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Info][Graphisme]histogramme à partir d'une image
    Bonjour,

    A partir d'une image jpeg, je souhaiterais créer les histogrammes correspondant aux 3 couleurs RGB. J'ai créé le code suivant mais cela prend beaucoup de temps pour une image de 1000 * 1000.
    Y aurait-il une fonction spécifique pour obtenir cet histogramme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /** Lecture de tous les pixels : */
    int w = bufferedImage.getWidth();
    int h = bufferedImage.getHeight();
    int[] rgbs = new int[w*h]; /** on crée l'espace néccessaire */
    bufferedImage.getRGB(0,0,w,h,rgbs,0,w);
     
    /** Lecture manuelle des composantes : */
    for (int i = 0; i < rgbs.length; i++) {
      int rouge = (rgbs[i] >>16 ) & 0xFF;
      int vert = (rgbs[i] >> 8 ) & 0xFF;
      int bleu = rgbs[i] & 0xFF;
      histoRouge.add(rouge, Integer.toString(Integer.parseInt(histoRouge.get(rouge).toString()) + 1));
      histoVert.add(vert, Integer.toString(Integer.parseInt(histoRouge.get(vert).toString()) + 1));
      histoBleu.add(bleu, Integer.toString(Integer.parseInt(histoRouge.get(bleu).toString()) + 1));
    }
    Merci d'avance

    Yannick

    Modéré par Thibaut ajout balises [Code], titre.

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    a mon avis, le ralentissement vient des 3 denieres lihgnes, ou tu utilises ds fonctions assez gourmandes (toString, get, parse, add ...)

    pourquoi tu ferai pas un tableau tout bete, et que tu incrementerais l'indice correspondant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    int[] histoRouge = new int[256];
    int[] histoVert = new int[256];
    int[] histoBleu = new int[256];
    for(int c=0; c<256; c++){
      histoRouge[c] = 0;
      histoVert[c] = 0;
      histoBleu[c] = 0;
    }
    ...
     
     
    /** Lecture manuelle des composantes : */
    for (int i = 0; i < rgbs.length; i++) {
      int rouge = (rgbs[i] >>16 ) & 0xFF;
      int vert = (rgbs[i] >> 8 ) & 0xFF;
      int bleu = rgbs[i] & 0xFF;
      histoRouge[rouge] ++;
      histoVert[vert] ++;
      histoBleu[bleu] ++;
    }
    A+

  3. #3
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    Sinon, tu peux toujours utiliser la librairie ImageJ qui a pas mal de plugins de traitement d'image :
    http://rsb.info.nih.gov/ij/
    http://rsb.info.nih.gov/ij/plugins/index.html#analysis

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Finalement j'ai utilisé la librairie ImageJ, j'y ai trouvé mon bonheur...

    Merci pour la réponse

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/11/2006, 18h36
  2. tracer des traits .. (a partir d'une image)
    Par estampille dans le forum Applets
    Réponses: 1
    Dernier message: 08/08/2006, 14h02
  3. Lien internet a partir d'une image
    Par Furlaz dans le forum C++Builder
    Réponses: 28
    Dernier message: 15/06/2006, 14h57
  4. [C#] custom control à partir d'une image / alpha blending
    Par Cyberwan dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/11/2005, 22h59
  5. appel de fonction à partir d'une image activer/desactiver
    Par philippe123 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/08/2005, 17h26

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