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

avec Java Discussion :

Compare deux image avec un point definis et le replacé si besoins


Sujet :

avec Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut Compare deux image avec un point definis et le replacé si besoins
    Bonjour,

    Je me lance dans un nouveau projet.

    L'idée est d'avoir une fenetre et au centre une balle rouge.

    Je scan la fenetre toute les X secondes (je voudrai tourne a 30 image par mais ca risque d'etre complique) pour compare l'image 1 a l'image 2.

    Si cette balle rouge bouge de x pixel vers la gauche sur l'image 1(par exemple), alors la je la replace sur l'image 2 de x pixel vers la droite ainsi de suite.

    Bien entendu je doit faire en sorte que les images scanner soit juste en memoire le temps du traitement et detruite ensuite.

    Faire le scanner ne devrai pas me pose de soucis (j'ai trouvé quelque base interressante) mais comment faire la comparaison.


    J'ai cherche mais sans resultat, peu etre je n'utilise pas les bon mots clef.

    Si vous avez une idee,

    Cordialement

    Fred

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Un de mes collègues a fait quelque chose de comparable. Je n'ai pas le code sous la main, mais je sais qu'il a utilisé la librairie OpenCV: https://opencv.org, qui est une lib gratuite de reconnaissance d'image haute performance.

    Alors je vais pas pouvoir t'aider sur l'utilisation, par contre, c'est vraiment vraiment puissant. A toi de creuser

  3. #3
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Salut,

    Merci pour le renseignement, je vais regarde de plus pres.

    Mais j'ai pense a une autre maniere de réalise mon projet.

    A priori sur papier sa passe XD et ca ne devrai pas etre lourd.

    Je vais capture une zone de pixel et travaille avec.

    Fred

  4. #4
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Re bonjour,

    Toujours dans mes images XD,

    Je recupere 4 pixel sur mon image avec ceci (le code fonctionne) :
    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
     
    ...
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
            System.out.println("taille ecran "+ screen);
     
    point = MouseInfo.getPointerInfo().getLocation();
                  System.out.print(point);
     
     
                  System.out.print("couleur");
     
                  color = robot.getPixelColor(point.x-70, point.y-70);
                  System.out.println("1 =  " + color.getBlue()+ color.getGreen() + color.getRed());
                  Color color1 = robot.getPixelColor(point.x+70, point.y-70);
                  System.out.println("2 =  " + color1.getBlue()+ color1.getGreen() + color1.getRed());
                  Color color2 = robot.getPixelColor(point.x-70, point.y+70);
                  System.out.println("3 =  " + color2.getBlue()+ color2.getGreen() + color2.getRed());
                  Color color3 = robot.getPixelColor(point.x+70, point.y+70);
                  System.out.println("4 =  " + color3.getBlue()+ color3.getGreen() + color3.getRed());

    ce que j'aimerai pouvoir faire, c'est recupere les coordonnes des 4 points.

    Je ne vois pas trop comment faire.

    Merci


    Fred

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    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 095
    Par défaut
    Bah tes coordonées tu les as en entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (point.x-70, point.y-70);
    (point.x+70, point.y-70);
    (point.x-70, point.y+70);
    (point.x+70, point.y+70);
    Je ne comprends pas ton problème.

    Edit : D'ailleurs tu ne dis nulle part que la fenetre que tu "espionne" est une fenetre dont tu n'as pas la main dessus et qu'il ne s'agit nullement d'image au sens java.
    (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
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonsoir,


    Pour la fenetre que je regarde c'est ce qui se passe sur mon ecran, uen video, une photo ...( le code est fonctionnel)

    Je mis prend peu etre mal pour mon projet, mais j'ai besoins de faire bouge la souris en fonction de couleur de pixel avec la class robot.

    D'apres mes recherche, je ne peu faire qu'un robot.mousemove avec des coordonnées(x,y) et pas des pixel (peu etre que j'ai mal cherche)

    Pour augmente ma precision je voudrai recupere 5 pixel a l'ecran (pentagone) et place la souris au centre de celui ci, 5 point car je peu "perdre" un point ou deux donc garde la precision avec les autre.

    L'idee est que si l'image bouge, la souris suivra le mouvement.


    Donc j'impose a java ve cavec les pixels a scanner.
    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
    ...
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
            System.out.println("taille ecran "+ screen);
     
    point = MouseInfo.getPointerInfo().getLocation();
                  System.out.print(point);
     
     
                  System.out.print("couleur");
     
                  color = robot.getPixelColor(point.x-70, point.y-70);
                  System.out.println("1 =  " + color.getBlue()+ color.getGreen() + color.getRed());
                  Color color1 = robot.getPixelColor(point.x+70, point.y-70);
                  System.out.println("2 =  " + color1.getBlue()+ color1.getGreen() + color1.getRed());
                  Color color2 = robot.getPixelColor(point.x-70, point.y+70);
                  System.out.println("3 =  " + color2.getBlue()+ color2.getGreen() + color2.getRed());
                  Color color3 = robot.getPixelColor(point.x+70, point.y+70);
                  System.out.println("4 =  " + color3.getBlue()+ color3.getGreen() + color3.getRed());

    C'est ici que je voudrai que Java me renvois les coordonnees de c'est pixels pour les utilises avec robot mousemove ou encore mieux deplacer la souris sur un pixel (couleur), celui au centre des 6 points


    Si l'image bouge, la souris suit. Bien entendu, j'ai une serie de boolean avec des conditions lié a mouse press ou release (le code est est fonctionnel egalement a ce niveau)


    Cordialement

    Fred

  7. #7
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonsoir,

    Apres pas mal de recherche, test, je me suis embrouille les pinceaux et effectivement de donne des coordonnees a java pour savoir la couleur du pixel et me renvoye une coordonnes ecran en me sert a rien....

    J'arrive a definir une couleur cible et deplace la souris dessus avec robot mousemove

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public class Bot {
        public static void main(String[] args) throws Exception {
            {
     
                Robot robot = new Robot();
     
                Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
     
                BufferedImage img = robot.createScreenCapture(rectangle);
     
                Color target = new Color(255, 0, 0);//Placeholder
     
     
                int originalX, originalY;
     
                originalX = 0;
                originalY = 0;
     
     
     
     
                for (int x = 0; x < rectangle.getWidth(); x++) {
                    for (int y = 0; y < rectangle.getHeight(); y++) {
     
                        if (img.getRGB(x, y) == target.getRGB() ) {
                            originalX = x;
                            originalY = y;
                            break ;
                        }
                    }
                }
     
     
                for (int x = 0; x < rectangle.getWidth(); x++) {
                    for (int y = 0; y < rectangle.getHeight(); y++) {
                        if (img.getRGB(x, y) == target.getRGB()) {
                             if (originalX != x && originalY != y) {
                                robot.mouseMove(x, y);
                                break;
                            }
                        }
                    }
                }
            }
        }
    }



    cependant j'ai deux probleme pour realise mon projet :

    Premier : Definir la couleur cible lorsque je clic avec la souris ( la couleur cible sera celle ou est positionne la souris et non connu a l'avance)

    J'arrive a connaitre le pixel de la position de la souris mais je n'arrive pas a utilise les données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Color target1 = robot.getPixelColor(point.x , point.y);

    deuxieme : tant que je reste appuyé sur la souris celle si reste sur la couleur/pixel et la suit ci celle ci bouge


    l'idee est d'avoir la souris qui suit une balle qui bouge dans tout les sens a l'ecran.



    Merci

    Fred

Discussions similaires

  1. Comparer deux images avec Resemble.js
    Par FirePrawn dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/04/2013, 10h56
  2. comparer deux images
    Par alex01pernot dans le forum Delphi
    Réponses: 4
    Dernier message: 03/04/2007, 16h08
  3. Comparer deux images pas directement superposables
    Par Byhias dans le forum Images
    Réponses: 2
    Dernier message: 12/03/2007, 16h41
  4. comparer deux fichiers avec une api windows
    Par sweetdreamer dans le forum Windows
    Réponses: 4
    Dernier message: 25/05/2006, 22h10
  5. [struts] Comparer deux variables avec <logic:equal>
    Par trax020 dans le forum Struts 1
    Réponses: 4
    Dernier message: 29/05/2005, 11h08

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