Traitement d'image [Résolu]

Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 18 nov. 2013 à 22:15 - Dernière réponse : cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention
- 21 nov. 2013 à 07:49
Bonjour ;
Je programme une application sous java qui fait le traitement d'image.
Mais j'ai un problème avec l'intensité de l'image même si je ne fais pas de traitement juste récupération des pixels puis affichage l'image devient un peu sombre.
voici url de l'image original et après faire récupération puis l'affichage:
https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash3/995534_234385293397562_1279017317_n.jpg
Voici code pour récupérée les pixels :
public void First(){
    try {
        BuImg2 = ImageIO.read(new File(UrlPhoto));       } 
    catch (IOException e) {
        e.printStackTrace();
        System.out.println("Excception BuImg     ");
    }
    java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage(UrlPhoto);
    Height=image.getHeight(null);
    Width=image.getWidth(null);
    System.out.println("valeur Height : "+Height+"  valeur Width : "+Width);
    pixelsMP = new double[Width][Height];
    pixelInt = new int[Width][Height];
    for (int i=0;i<(Width);i++){
        for (int j=0;j<(Height);j++){
            pixelInt[i][j]=0;
            pixelsMP [i][j]=0;
        }
    }
}

Pour l'affichage des pixels :
BufferedImage inm4;
inm4 = new BufferedImage(Width,Height,BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = inm4.getRaster();
  
for (int i=0;i<Width;i++){
    for (int j=0;j<Height;j++){
        int rt=(int)(pixelInt[i][j]); 
        inm4.setRGB(i, j, rt);
    }
}
Afficher la suite 

13 réponses

Répondre au sujet
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - Modifié par cs_Julien39 le 19/11/2013 à 08:43
0
Utile
Salut,

Je te donne une fonction qui me permet de modifier la luminosité d'une image (sans la parcourir pixel par pixel) :
public BufferedImage transformer(BufferedImage image) {
        RescaleOp brighterOp = new RescaleOp(ponderation, 0, null);
        return brighterOp.filter(image, null);
}


Si tu veux tester ca, tu peux utiliser ce projet : http://codes-sources.commentcamarche.net/source/55156-traitement-d-images
Commenter la réponse de cs_Julien39
Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 19 nov. 2013 à 10:24
0
Utile
Bonjour;
Merci pour votre réponse, Mon but et de faire autre traitement sur l'image mais je perds la luminosité même si je ne fait que la récupération des pixels puis les affichés
Commenter la réponse de Bel.kamal
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 19 nov. 2013 à 10:47
0
Utile
Dans ce cas, essayes ceci :
inm4 = new BufferedImage(Width,Height,,BufferedImage.TYPE_INT_RGB)
Commenter la réponse de cs_Julien39
Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 19 nov. 2013 à 17:15
0
Utile
Merci pour votre aide, sa ne marche pas tjr voici l'image afficher avec inm4 = new BufferedImage(Width,Height,,BufferedImage.TYPE_INT_RGB) :
https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-prn2/s403x403/1466156_234614820041276_2138812277_n.jpg
Comme s'il y'a juste le composant Bleu
Commenter la réponse de Bel.kamal
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 20 nov. 2013 à 07:58
0
Utile
Peux tu me donner le code qui te permet de remplir pixelInt ?

Tu devrais utiliser directement une BufferedImage et la lire avec ImageIO.read
Commenter la réponse de cs_Julien39
Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 20 nov. 2013 à 10:27
0
Utile
Merci encore pour vos réponse, Mon but est de récupéré les pixels de l'image faire des algorithmes sur les pixels puis affichés l'image par la suite. Mais quand je ne fais que la récupération puis l'affichage des pixels je perde la luminosité.
Voici le code pour récupérer les pixels:


int pixel;

for (int i=0;i<Width;i++){
for (int j=0;j<Height;j++){

pixel=GetLastBytes(BuImg.getRGB(i,j));
pixelInt[i][j]=pixel
}}
Commenter la réponse de Bel.kamal
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 20 nov. 2013 à 11:22
0
Utile
Et le contenu de la méthode GetLastBytes ?
Commenter la réponse de cs_Julien39
Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 20 nov. 2013 à 11:37
0
Utile
dsl je l'est pas mis, voici le code :
public int GetLastBytes(long original) {

String hexBytes = Long.toHexString(original);

return Integer.parseInt(hexBytes.substring(hexBytes.length()-2),16);
}
Commenter la réponse de Bel.kamal
Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 20 nov. 2013 à 11:45
0
Utile
Si j'enlève la fonction GetLastBytes sa marche bien mai les pixels ne sont pas entre 0 et 255
Commenter la réponse de Bel.kamal
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 20 nov. 2013 à 14:21
0
Utile
On a donc identifié le problème.

Le RGB n'est pas entre 0 et 255. Pourquoi veux tu qu'il le soit ?
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 20 nov. 2013 à 14:23
0
Utile
Pour les couleurs de base (rouge vert et bleu), tu as des nuances sur 255 tons.

Mais le RGB est une facon de représenter toutes ces couleurs en un seul nombre http://fr.wikipedia.org/wiki/Red_Green_Blue
Commenter la réponse de cs_Julien39
Bel.kamal 7 Messages postés lundi 18 novembre 2013Date d'inscription 20 novembre 2013 Dernière intervention - 20 nov. 2013 à 16:52
0
Utile
Boujour;
oui c résolut, Merci pour votre aide.
puisque Je travaille sur des images au niveau de gris je voudrais avoir un nbr caractérisant le pixel entra 0 et 255.
Commenter la réponse de Bel.kamal
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 15 mars 2018 Dernière intervention - 21 nov. 2013 à 07:49
0
Utile
Le rgb correspondant au niveau de gris est :
Color c = new Color(rgbInitial);
poidsGris = (c.getRed() + c.getGreen() + c.getBlue()) / 3;
rgbGris = new Color(poidsGris, poidsGris, poidsGris).getRgb();
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.