# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Comparer deux images python

## luclucdu38

Bonjour  tous,

j'ai beau chercher sur internet, rien a faire, je ne trouve pas ou comprend pas comment comparer deux images. En tout cas comme j'en ai besoin.

Je voudrais crer une fonction('Image.png') qui prend une capture d'cran puis compare avec celle de la base de donne. Pas de problme pour la capture d'cran...

L'image charg peut tre trs petite, 10px par 10px comme 500px par 500px. Il faudrait que ma fonction me retourne une rponse positive si cette petite image est prsente dans la capture d'cran (donc dans la grande) mais a peut tre n'importe ou dans cette screenshot. Et une rponse ngative si celle-ci n'est pas prsente bien sr.

Je recherche de l'aide car cela fait 1 semaine que je nages littralement dedans... je suis dbutant en python donc mollo les explications svp les gens  ::mrgreen::  pas trop technique si vous voyez ce que je vais dire.

je vous remercie d'avance

luc

----------


## wiztricks

Salut,

Comparer 2 images est d'abord une question d'algorithme.
Lorsque vous aurez les ides plus claires sur "comment" faire cette comparaison, il sera temps de voir comment coder cela avec Python (ou un autre langage).
Et les personnes qui vous permettront de dfinir un algorithme qui tienne la route frquentent plutt le forum "Algo".
Bon courage,

- W

----------


## luclucdu38

Merci, je vais voir la-bas parce que en fait j'avais pens  comparer pixel par pixel mais j'ai vite abandonn vue comment c'est long et pas efficace. En cherchant sur internet certaines personnes dises qu'il existe des algorithmes de comparaison pixel par pixel rapide mais je trouve pas et je n'ai pas ide de comment ils font...

Je ne connais pas le forum, je suis nouveau.

----------


## Flodelarab

Bonjour,

apparemment, tu cherches une galit stricte. Donc la recherche pixel par pixel n'est pas mauvaise en elle-mme. Mais il ne faut pas comparer tous les pixels quand il y en a dj un qui diffre...

De la mme faon, ce qui peut devenir infiniment long, c'est de vouloir rcuprer les pixels un a un par une mthode getPixel(), lente. Alors que d'autres mthodes te mettent, en 1 seule fois, ton bout d'image dans un tampon (buffer) dans lequel tu travailles trs vite.

[dernierrecours] Ensuite, des images identiques ont probablement des sommes identiques ou valeurs moyennes identiques, carts-type identiques, etc... Donc pour rejeter une possibilit, il suffit qu'une fonction comme celles cites, dj implmente et super rapide te donne un rsultat pour trancher. [/dernierrecours]

----------


## luclucdu38

j'ai russit avec une moyenne de gris pour chaque pixel.

La grande image est couper en lamelles qui correspondes  1 pixel de haut. Cet lamelle est compar avec la premire lamelle de la petite image. Si la petite est comprise dans la grande alors on passe  la suivant. Sinon on recommence  la lamelle suivante.

Voici le code :



```

```



```

```



```

```

La fonction compare_image('photo.png') :

Renvoie "1" si la photo est comprise dans l'cran, le screen.
Renvoie "0" si la photo n'est pas comprise dans l'cran, le screen.

Le temps de traitement est maximum 10 secondes pour une petite photo de 100 par 100.




> De la mme faon, ce qui peut devenir infiniment long, c'est de vouloir rcuprer les pixels un a un par une mthode getPixel(), lente. Alors que d'autres mthodes te mettent, en 1 seule fois, ton bout d'image dans un tampon (buffer) dans lequel tu travailles trs vite.


Il faudrait que mon temps de traitement soit <1 seconde voir <0.5 secondes pour le top du top.
ton histoire de buffer m'intresse mais je ne vois pas comment je peux l'utiliser.

----------


## luclucdu38

Apres modifications, j'ai russit  faire mieux :

La fonction renvoie 'True',x_milieu,y_milieu si l'image est trouv dans le champs de recherche allant de x1,y1,x2,y2. Par dfaut, si les 4 dernires variables ne sont pas entres, la fonction fait la recherche dans tout l'cran.

La fonction renvoie 'False','None','None' si l'image n'est pas prsente dans le champs de recherche.

compare_image('image_a_rechercher.png',x1,y1,x2,y2)



```

```

Si quelqu'un trouve une technique plus rapide, je suis preneur.

----------

