CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Détéctions de pixels pour image

Manicup4
Manicup4
Niveau 10
19 février 2010 à 11:47:03

(Je n'ai plus de place dans le titre)

:salut:

Je suis actuellement en train de créer un programme assez conséquant en Python, et j'aimerai savoir s'il était possible d'effectuer une opération qui me faciliterai grandement la tâche - les mots sont faibles - :

- Je prend une image .png 741x1219 pixels (par exemple)
- J'ai besoin de savoir si le pixel x:652 y:1201 est de couleur #3FBF40 par exemple. Python - ou l'un de ses module - possède-t-il une fonction permettant d'identifier la couleur d'un pixel d'une image (ou d'un canvas au mieux) ?

D'avance, merci beaucoup :hap:

Manicup4
Manicup4
Niveau 10
19 février 2010 à 11:49:37

J'ai oublié de rajouter que le format de l'image importe peu :)

saleGauss
saleGauss
Niveau 9
19 février 2010 à 17:23:43

Bah je sais pas trop, mais si tu ouvres ton fichier image (.png) avec un outil (une lib) Python, tu va surrement récupérer une structure de donnée contenant tes pixels.

Si tu ouvre ton fichier à la main en construisant ton tableau 2 dimensions (ou autre structure) de pixels au fur et à mesure que tu lis ton fichier .png, tu arriveras surement au même resultat (ou très similaire).

Je dirais très certainement que des libs Python doivent exister pour ouvrir le fichier image, l'analyser et te renvoyer une structure de données contenant tes infos de pixels.
Je ne saurais pas te dire laquelle (jamais fais de Python), mais vu que c'est très basique et pas original ça doit se trouver facilement, non ?

Manicup4
Manicup4
Niveau 10
19 février 2010 à 19:31:18

Voilà ce que j'ai trouvé sur Internet : http://snippets.dzone.com/posts/show/632

  1. some setup

from graphics import *
im = screenshot() # sample image

def foo(self, x,y): # Image.getpixel
pos = y*(self.size[0]*3+1) + 3*x+1 # each line has '\x00' prefix
return struct.unpack('3B', self.pixels[pos:pos+3])

  1. add getpixel to class Image

foo.im_class = Image
foo.im_func = foo
Image.getpixel = foo

def enable(im):
im.save('D:\\pixels.png', bpp=24, compression='no')
f = open('D:\\pixels.png', 'rb')
f.seek(8 +8+13+4)
chunk = []
while 1:
n = struct.unpack('>L', f.read(4))[0]
if n==0: break # 'IEND' chunk
f.read(4) # 'IDAT'
chunk.append(f.read(n))
f.read(4) # CRC
f.close()
data = zlib.decompress(''.join(chunk))
im.pixels = data # data will be retrived by im.getpixel(x,y)

getpixel.enable(im) # magically give Image.getpixel()
r, g, b = im.getpixel(0,0) # top left corner
print 'Red: %s, Green:%s, Blue:%s' % (r,g,b)

C'est juste le "from graphics import *" qui me chiffone. Existe t'il vraiment une librairie qui s'appelle "graphics" ?

Kaoron
Kaoron
Niveau 9
19 février 2010 à 22:12:28

Cherches PIL (Python Imaging Library) et plus particulièrement Image.getpixel(x,y).

Manicup4
Manicup4
Niveau 10
21 février 2010 à 20:43:22

En faites, il ne reconnait pas la fonction screenshot()

getpixel(x,y) est un module téléchargable ici : http://larndham.net/service/pys60/getpixel.py

Manicup4
Manicup4
Niveau 10
21 février 2010 à 21:24:57

Trouvé ! Voila ce que j'ai trouvé sur developpez.com (par guigui_) :

La fonction Image.open(path) permet d'ouvrir une image de tout format (compatible avec la bibliothèque Pil)
la fonction im.getdata() retourne un objet-séquence contenant les valeurs des pixels de l'image. Cependant il n'est lisible que par Pil. La fonction list permet ensuite de récupérer cette séquence sous un format lisible par l'utilisateur. On récupère alors une liste de tuples à 3 compoantes si l'image est couleur, une liste simple sinon.

import Image
im = Image.open("[Votre image]")
data = list(im.getdata())

Cela renvoie une liste contenant des tuples : chaque tuple correspond au code RGB du pixel. Je pense (mais je ne suis pas sur) que les pixels sont choisis dans l'ordre des lignes (1e pixel en partant de la gauche de la premières lignes jusqu'à premier pixel en partant de la droite de la dernière ligne).

Avec quelques formules, on doit pouvoir cibler un pixel en particulier. Cepandant, si vous avez plus d'info sur la méthode "getpixel", n'hésitez pas à nous la faire partager :-)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment