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

Java Discussion :

Programme filtre jaune [Débutant(e)]


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Programme filtre jaune
    Bonjour à tous,

    Je suis en terminale S options sciences de l'ingénieur et pour le bac nous devons rendre un projet. Mon projet cible un drone de reconnaissance permettant de connaitre la taille d'une zone incendiée. Pour cela, avec une caméra il prend une photo de la zone en question. Que fait le java ici me direz-vous ? On y vient..

    Je dois créer un programme qui convertit les pixels de l'image "correspondant à du feu" en jaune et le reste en blanc.
    J'en ai donc conclu que mon programme devait analyser chaque pixel de l'image :
    - si le pixel possède une intensité de rouge et de vert respectivement supérieures à 180 et 200 ( soit une couleur proche de celle du feu) il doit être remplacé par un pixel d'intensité de rouge et de vert de 255 chacun afin d'obtenir du jaune.
    - si le pixel possède ne possède pas les intensités souhaitées, on le remplace par un pixel d'intensité de rouge de vert et de bleu de 255 afin d'obtenir du blanc.

    Le problème est que je ne sais absolument pas coder en java, ni en aucun autre langage ; j'en appelle donc à votre aide . J'ai à ma disposition le logiciel "Java's cool 4".
    Si vous pouvez me renseigner sur mon programme, m'envoyer le lien d'un programme qui filtre une couleur ou le programme directement, vous m'aideriez beaucoup.

    Merci d'avance,
    Logan.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je ne peux pas te dire pour Java's Cool (ce n'est pas du Java, mais un truc qui se base dessus et simplifie soi-disant), mais en Java, pour faire le remplacement de pixel dont tu parles, tu peux simplement utiliser une instance de Bufferedimage. La méthode getRGB(x, y) te donne la couleur rgba (srgb) du pixel de coordonnées x et y. Tu peux extraire chaque composante par opérations bitwise, ou simplement utiliser la classe Color :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Color color =  new Color(image.getRGB(x,y),true);
    int rouge = color.getRed();
    int vert= color.getGreen();
    int bleu = color.getBlue();
    Ensuite, la méthode setRgb(x, y, rgb) te permattra de réaffecter la couleur de ton choix (rgb) au pixel de coordonnées x et y. Pour réobtenir le rgb à partir de composantes rouge, verte et bleue, tu peux faire : int rgb=new Color(rouge,vert,bleu).getRGB().

    En cherchant sur le net "BufferedImage et Java's Cool" tu devrais pouvoir trouver des exemples qui te permettront de réaliser ton programme complet.

    En revanche, je ne suis pas sûr que la détection de feu en elle-même sera très efficace par ce moyen.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut
    Me revoilà,
    Après quelques recherches j'obtiens un programme qui est celui-ci. Je tiens à préciser que je ne comprends pas forcément toutes les lignes car je me suis basé sur des programmes déjà faits. J'aimerai donc avoir votre avis ou des conseils afin d'améliorer mon programme. Merci d'avance.
    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
    22
    23
    24
    25
    BufferedImage image = seuillageImage(); 
    if (image != null) 
          result = new BufferedImage(image.getWidth(), image.getHeight(),BufferedImage.TYPE_INT_RGB); 
     
          for (int y = 1; y < image.getWidth()-1; y++) 
          { 
             for (int x=1; x < image.getHeight()-1; x++) 
             { 
                 int rgb = image.getRGB(y, x); // récupere la valeur RGB du pixel 
     
             int valR = (int) (getRed(rgb)); 
                 if(valR>180)
                    int valG = (int) ((getGreen(rgb)))
    			   if valG>200
    			     int valB = (int) ((getBlue(rgb)))
    			       if valB<40
    			         setRGB(y, x, makeRGB(255, 255, 0)); 
                    	  else 
                   	    setRGB(y, x, makeRGB(255, 255, 255)); 
                      else 
                        setRGB(y, x, makeRGB(255, 255, 255)); 
                 else 
                   setRGB(y, x, makeRGB(255, 255, 255)); 
                            } 
        }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Peut-être commencer par nous montrer un programme capable de compiler et un minimum lisible (il manque les blocs des ifs, c'est parfaitement illisible, même avec l'indentation un peu près correcte) et syntaxiquement correcte (qui, sans forcément les méthodes et les imports, compile).

    Pourquoi ne traites-tu pas la ligne au bord ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Simplifier tes conditions avec quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (int x = 1; x < image.getHeight() - 1; x++)
    				{
    					int rgb = image.getRGB(y, x); // récupere la valeur RGB du pixel 
     
    					if ((getRed(rgb) > 180) && (getGreen(rgb) > 200) && (getBlue(rgb) < 40))
    						result.setRGB(y, x, makeRGB(255, 255, 0));
    					else
    						result.setRGB(y, x, makeRGB(255, 255, 255));
     
    				}
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut
    Etant vraiment novice je ne savais pas ce que c'était que compiler. Donc après avoir compilé et simplifié le programme, j'obtiens ceci, Est-ce bon ?
    Merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void main() {
    load(image); //mettre le lien url de l'image
    BufferedImage image = seuillageImage(); 
    if (image != null) 
    result = new BufferedImage(image.getWidth(), image.getHeight(),BufferedImage.TYPE_INT_RGB); 
    for (int y = 1; y < image.getWidth()-1; y++);  
    for (int x=1; x < image.getHeight()-1; x++); 
    int rgb = image.getRGB(y, x); 
    int valR = (int) (getRed(rgb)); 
    if ((getRed(rgb) > 180) && (getGreen(rgb) > 200) && (getBlue(rgb) < 40))
      setRGB (y, x , makeRGB(255, 255, 0));
    else setRGB (y, x , makeRGB(255, 255, 255));
    }

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Compiler ça veut dire transformer le code source Java en code exécutable (appelé bytecode), sous-entendu qui s'exécute (sinon quand ça ne compile pas, on a des erreurs de compilation et on ne peut pas exécuter).

    Maintenant, indenter son code rend aussi sa lecture plus aisée.

    Attention, quand tu écris un point-virgule juste après un for, comme dans for (int y = 1; y < image.getWidth()-1; y++);, ça ferme le for. Ce qui se trouve après ne fait pas partie du for.

    Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i=0;i<10; i++);
    {
       System.out.println("bonjour");
    }
    for(int i=0;i<10; i++)
    {
       System.out.println("au revoir");
    }
    affiche 1 fois "bonjour" et 10 fois "au revoir" !

    En plus, les variables déclarées dans le for sont locales au for : aucun autre code en dehors ne peut les voir et y accèder.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0;i<10; i++);
    {
       System.out.println(i);
    }
    Ne peut pas compiler parce que i est déclaré dans le for, et, donc n'est pas visible dans le bloc après, qui ne fait pas partie du for. Donc ça ne compile pas. Tout comme ton code.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. programme filtre median
    Par wahidred dans le forum Images
    Réponses: 1
    Dernier message: 20/12/2010, 09h11
  2. Comment concevoir une chaîne de filtre par programme ?
    Par franck SEFIC dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2007, 15h21
  3. programmer un filtre after effect
    Par hipe dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 17/05/2007, 20h16
  4. Programmation du filtre sur les Dates
    Par Alpha31 dans le forum Access
    Réponses: 5
    Dernier message: 26/06/2006, 09h21
  5. Programmation d'un filtre particulier sur formulaire
    Par student dans le forum Access
    Réponses: 2
    Dernier message: 24/02/2006, 12h34

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