[..] Faire un PixelSearch, mais pas sur un seul pixel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
myselfy36
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 02 juil. 2011 21:12
Status : Hors ligne

[..] Faire un PixelSearch, mais pas sur un seul pixel

#1

Message par myselfy36 »

Bonjour,

Voici une fonction basique :

Code : Tout sélectionner

While 1
    $aim = PixelSearch(257,530,552,614,0xFFFFFF)
    If Not @error Then
            MsgBox(0,"Ca alors...","On a trouvé un pixel blanc pur.")
    EndIf
WEnd
Elle cherche, sans s'arrêter, dans un carré si il y a un pixel blanc, et si oui, affiche un message.

J'aimerais savoir si il est possible de faire la même chose mais plutôt que de rechercher un pixel blanc, on rechercherait un carré blanc (2x2 pixels).

Ainsi, si l'on voit 1 pixel blanc, il n'y aurait pas de message.
Si on voit 2 pixels blancs côte-à-côte, il n'y en aurait pas non plus.
Si on en voit 4 éparpillés, il n'y en aurait toujours pas.
Mais si on en voit 4 formant un carré, il y en aurait un.

Des idées ?

Merci.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#2

Message par mikell »

PixelSearch cherche de gauche à droite et de haut en bas
Donc pour chaque pixel blanc trouvé de coordonnées x et y, il faut faire un test avec PixelGetColor pour les 3 pixels voisins de coordonnées (x+1, y) , (x, y+1) , (x+1, y+1)

Amuse-toi bien :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#3

Message par Strofe »

Bonjour

PixelSearch retourne le premier pixel rencontré (si je traduis bien la documentation).

Pourquoi pas un algorithme

une ligne sur deux et une colonne sur deux pour toute la zone.
Si PixelGetColor = Ok alors si test_zone (4x4) = vrai alors trouvé !!!
Boucle la zone

Func test_zone(zone)
return PixelSearch(zone)
EndFunc

C'est ce que je ferai personnellement...

Bon courage
Y a pas de problème, y a que des solutions. Reste à les trouver.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#4

Message par Tlem »

Un carré de 2X2 pixels est un image. :)
Donc le plus simple est d'utiliser l'UDF qui va bien. ^^
Sujet traité récemment.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#5

Message par mikell »

Bien vu :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#6

Message par Strofe »

Y a pas de problème, y a que des solutions. Reste à les trouver.
myselfy36
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 02 juil. 2011 21:12
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#7

Message par myselfy36 »

Bonjour,

Si cela était aussi simple, j'aurais en effet vérifié la couleur des pixels du voisinage ($aim[0]+1 etc.)

Cependant, le carré de 2x2 pixels que je recherche est... en mouvement.

Si je trouve un pixel blanc ($aim[0],$aim[1]), le temps que autoit vérifie la couleur du pixel d'à coté ($aim[0]+1,$aim[1]), il est possible que le carré se soit déjà décalé d'un pixel et que donc la couleur blanche ne soit pas trouvée pour le pixel ($aim[0]+1,$aim[1])

Cette méthode ne convient donc pas.

Pour ce qui est des "UDF", c'est donc un algorithme tout fait qui pourrait m'aider ?
Mais si c'est un algorithme, alors c'est un script assez long, qui prend du temps à s'éxécuter et je risque d'avoir le même problème ? :/
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#8

Message par mikell »

Je ne vois vraiment pas comment faire une détection correcte sur une image en mouvement donc instable, à part peut-être faire des 'snapshot' en mémoire et travailler sur eux
De toute façon ça revient à changer les données d'un problème avant de l'avoir résolu, le résultat sera toujours faux
Si un carré blanc est détecté quelle que soit la méthode, le temps que ses coordonnées s'affichent il aura changé de place

@Strofe
Tlem a parlé d'image donc je crois qu'il pensait à ImageSearch, mais pareil, sur une image en mouvement j'ai des gros doutes
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
myselfy36
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 02 juil. 2011 21:12
Status : Hors ligne

Re: [..] Faire un PixelSearch, mais pas sur un seul pixel

#9

Message par myselfy36 »

Merci en tout cas pour vos réponses.
A la limite si la position du carré est donnée quelques secondes apparaît qu'il ait bougé, cela ne serait pas si grave.

@Strofe : Ton lien m'a l'air intéressant :
recherche du 'spot' le plus proche (carré de NxN contenant au moins P pixels respectant les critères de couleur mentionnés)
Cependant.. n'ayant jamais utilisé de UDF, j'aimerais savoir si il y a un tutorial quelque part pour cela ? (Je ne vois pas du tout comment appeler la fonction crée avec l'UDF dont tu m'as donné le lien)
Répondre