Traitement d'image [Résolu]

Signaler
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013
-
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
-
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);
    }
}

13 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
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
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
Dans ce cas, essayes ceci :
inm4 = new BufferedImage(Width,Height,,BufferedImage.TYPE_INT_RGB)
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
Peux tu me donner le code qui te permet de remplir pixelInt ?

Tu devrais utiliser directement une BufferedImage et la lire avec ImageIO.read
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

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
}}
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
Et le contenu de la méthode GetLastBytes ?
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

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);
}
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

Si j'enlève la fonction GetLastBytes sa marche bien mai les pixels ne sont pas entre 0 et 255
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
On a donc identifié le problème.

Le RGB n'est pas entre 0 et 255. Pourquoi veux tu qu'il le soit ?
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
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
Messages postés
7
Date d'inscription
lundi 18 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

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.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
296
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();