Projet traitement image PGM et Scale Tkinter

Projet traitement image PGM et Scale Tkinter - Python - Programmation

Marsh Posté le 27-05-2014 à 15:42:54    

Hello,
 
tudiant débutant en python (j'ai jamais dev sur autre chose) j'ai un petit soucis (parmi tant d'autres) sur un projet à rendre pour bientot.
Le projet consiste en un programme simple de traitement d'image PGM, sous Python 3, donc.
 
J'essaie de faire marcher un "Scale" pour augmenter la luminosité d'une image (se trouvant dans un fichier interface.py)  et de passer la valeur à une autre fonction en paramètre, qui se trouve dans un autre fichier (les fonctions de calcul). Le problème étant que mon scale ne change rien. Si j'injecte une valeur en chiffres directement, là, ça fonctionne.
 
Du coté de mon fichier interface.py, mon code ressemble à ça :
 

Code :
  1. def augmenter_luminosite(cadre):
  2.     fen2=Tk()
  3.     w1 = Scale(fen2, from_=-100, to=100, orient=HORIZONTAL)
  4.     w1.pack()
  5.     z = w1.get()
  6.     luminosite(t_image, hauteur, largeur, z)
  7.     rafraichir(cadre)


 
Du coté de la fonction dans mon fichier fonctions.py, j'ai :
 

Code :
  1. def luminosite(t_image,hauteur,largeur,z):
  2.     for i in range(hauteur):
  3.         for j in range(largeur):
  4.             t_image[i][j] = t_image[i][j] + z
  5.             if t_image[i][j]<0:
  6.                 t_image[i][j]=0
  7.             if t_image[i][j]>255:
  8.                 t_image[i][j]=255


 
Quelqu'un a t-il une idée siouplait ? Je désespère...
 
PS : Mes fichiers sont dispos ici : http://dl.free.fr/dq51JwLUs


Message édité par Pierrinator le 27-05-2014 à 15:44:12
Reply

Marsh Posté le 27-05-2014 à 15:42:54   

Reply

Marsh Posté le 27-05-2014 à 22:17:34    

Salut,
Je n'ai plus touché à Python depuis longtemps.

Code :
  1. def augmenter_luminosite(cadre):
  2.             fen2=Tk()
  3.             w1 = Scale(fen2, from_=-100, to=100, orient=HORIZONTAL)
  4.             w1.pack()
  5.             z = w1.get()
  6.             print(z)
  7.             luminosite(t_image, hauteur, largeur, z)
  8.             rafraichir(cadre)


 
Si l'on affiche la valeur de z, elle est égale à 0 car il faut attendre que l'on ait fini de bouger le curseur avant de modifier la luminosité.
Ici, on affiche la fenêtre slider et tout de suite après on récupère la valeur du slider alors qu'il faudrait attendre la fin de la modification du slider (avec une callback fonction par exemple).
Je ne sais pas si je me suis bien fait comprendre.  
 
Par exemple quelque chose comme ça :

Code :
  1. #!/usr/bin/python3
  2. from tkinter import *
  3. from tkinter.filedialog import *
  4. from tableaux import *
  5. from pgm_raw import *
  6. from fonctions import *
  7. t_image=None
  8. largeur=-1
  9. hauteur=-1
  10. cadre=None
  11. slider=None
  12. # Nos fonctions ---------------------------------------------
  13. # Ouvrir_fichier  --------------------
  14. def ouvrir_fichier(cadre, info):
  15.     global image, t_image, hauteur, largeur
  16.     nom_fichier = askopenfilename()
  17.     image = PhotoImage(file = nom_fichier)
  18.     cadre.configure(height=image.height(), width=image.width())
  19.     cadre.create_image(0,0, anchor = NW, image = image)
  20.     t_image,hauteur,largeur=lire_fichier_pgm_binaire(nom_fichier)
  21.     cadre.bind("<Motion>", lambda event : mouse (event, info))
  22. # file_save  ------------------------
  23. def file_save():
  24.     file_name=asksaveasfilename()
  25.     if file_name==' ':
  26.         return
  27.     ecrire_fichier_pgm_binaire(t_image ,image.width() ,image.height() ,file_name)
  28. def rafraichir(cadre):
  29.     global image
  30.     global t_image
  31.     file=mkstemp()
  32.     ecrire_fichier_pgm_binaire(t_image, hauteur, largeur, "toto.pgm" )
  33.     image=PhotoImage(file="toto.pgm" )
  34.     cadre.create_image(0,0,anchor='nw',image=image)
  35. #    remove(file[1])
  36. # La fonction Mouse
  37. def mouse(event, info):
  38.     x = event.x
  39.     y = event.y
  40.     info.configure(text= "x: " + str(x) + " y: " + str(y) + " val: " + image.get(x, y))
  41. def sel(cadre):
  42.    z = slider.get()
  43.    print(z)
  44.    luminosite(t_image, hauteur, largeur, z)
  45.    rafraichir(cadre)
  46. def augmenter_luminosite(cadre):
  47.     global slider
  48.     fen2=Tk()
  49.     slider = Scale(fen2, from_=-100, to=100, orient=HORIZONTAL)
  50.     slider.pack()
  51.     button = Button(fen2, text="Apply Scale Value", command=lambda:sel(cadre))
  52.     button.pack(anchor=CENTER)
  53. def rotation():
  54.     fen1=Tk()
  55.     Bouton90d=Button(fen1, text="Rotation à  90° à  droite", command=lambda:rotationA90Droite(t_image,hauteur,largeur))
  56.     Bouton90g=Button(fen1, text="Rotation à  90° à  gauche", command=lambda:rotationA90Gauche(t_image,hauteur,largeur))
  57.     Bouton180=Button(fen1, text="Rotation à  180°", command=lambda:rotation180(t_image,hauteur,largeur))
  58.     Bouton90d.pack()
  59.     Bouton90g.pack()
  60.     Bouton180.pack()
  61. def inversionInit():
  62.     inversion(t_image, hauteur, largeur)
  63. def rafraichirInit():
  64.     rafraichir(t_image, hauteur, largeur)


Message édité par honrisse le 27-05-2014 à 22:30:50
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed