Bonjour,

Je suis débutante en Python et je travaille actuellement sur un projet de logiciel de traitement d'image qui applique quelques filtres à une image.
J'ai rencontré quelques problèmes liés à l'interface graphique.

Tout d'abord, j'aimerais ajuster la taille de l'image a mon canevas, l'image est importer grâce a askopenfilename() et j'ai le module PIL qui me permet d'utiliser toutes les images. J'aimerais que l'image soit ajusté dans tous les cas, même si l'on change la taille de la fenêtre.

Ensuite, j'ai créé un histogramme et je n'arrive pas non plus a l'ajuster au canevas, sachant qu'il bouge selon la taille de l'image.

Voici mon histogramme :
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
def histogramme(self,image):
        (l, h) = image.size
        n = [0]*256
        def histonb(im,couleur):
            for i in range(l):
                for j in range(h):
                    p = im.getpixel((i,j))
                    n[p] += 0.07
            for i in range(255):
                self.hist.create_line(i, n[i], i+1, n[i+1],width=2,fill=couleur)
        if type(Image.getpixel(image,(0,0))) == int:
            histonb(image,'black')
        else:
            r,g, b= image.split()
            histonb(r,'red')
            histonb(b,'blue')
            histonb(g,'green')
et mon interface graphique en entière :
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from tkinter.filedialog import *
from tkinter import *
from PIL import Image, ImageTk
import Afficher_Image
import Filtres
from PIL.Image import *
 
photo = "/Users/anne-sophiecadre/Pictures/nb.png"
 
class Application:
    def __init__(self,fenetre):
        self.fenetre = fenetre
        self.initialisation()
        fenetre.config(background="white")
        fenetre.title("Logiciel de traitement d'images")
        fenetre.geometry('2000x1000')
 
    def histogramme(self,image):
        (l, h) = image.size
        n = [0]*256
        def histonb(im,couleur):
            for i in range(l):
                for j in range(h):
                    p = im.getpixel((i,j))
                    n[p] += 0.07
            for i in range(255):
                self.hist.create_line(i, n[i], i+1, n[i+1],width=2,fill=couleur)
        if type(Image.getpixel(image,(0,0))) == int:
            histonb(image,'black')
        else:
            r,g, b= image.split()
            histonb(r,'red')
            histonb(b,'blue')
            histonb(g,'green')
 
    def importer(self):
        self.file = askopenfilename(title="Ouvrir un fichier")
        pilImage = open(self.file)
        self.canevas1.image = ImageTk.PhotoImage(pilImage)
        self.canevas1.create_image(0,0,anchor=NW,image=self.canevas1.image)
        self.histogramme(pilImage)
 
    def modifie(self,f):
        a = open(self.file)
        if type(Image.getpixel(a,(0,0))) == int:
            im = Afficher_Image.image_matrice(a, f)
        else:
            im= Afficher_Image.couleur(a,f)
 
        self.canevas2.image=ImageTk.PhotoImage(im)
        self.canevas2.create_image(0,0,anchor=NW,image=self.canevas2.image)
 
    def initialisation(self):
        self.canevas1 = Canvas(self.fenetre)
        self.canevas1.config(background="blue")
        self.canevas1.grid(row=0,rowspan=7,column=0,columnspan=3,sticky='NSEW')
 
        self.canevas2 = Canvas(self.fenetre)
        self.canevas2.config(background="light blue")
        self.canevas2.grid(row=0,rowspan=7,column=3,columnspan=3,sticky='NSEW')
 
        for i in range(6):
            self.fenetre.grid_columnconfigure(i, weight=1)
        for i in range(6):
            self.fenetre.grid_rowconfigure(i, weight=1)
 
        self.bouton_effet1 = Button(self.fenetre, text="Flou",command=lambda: self.modifie(Filtres.flou))
        self.bouton_effet1.config(background="green")
        self.bouton_effet1.grid(row=0,column=6,sticky='NSEW')
 
        self.bouton_effet2 = Button(self.fenetre, text="Contraste",command=lambda: self.modifie(Filtres.contraste))
        self.bouton_effet2.config(background="green")
        self.bouton_effet2.grid(row=1,column=6,sticky='NSEW')
 
        self.bouton_effet3 = Button(self.fenetre, text="effet3")
        self.bouton_effet3.config(background="green")
        self.bouton_effet3.grid(row=2,column=6,sticky='NSEW')
 
        self.bouton_effet4 = Button(self.fenetre, text="effet4")
        self.bouton_effet4.config(background="green")
        self.bouton_effet4.grid(row=3,column=6,sticky='NSEW')
 
        label=Label(self.fenetre,text='Histogramme')
        label.grid(row=4,column=6,sticky='NSEW')
 
        self.hist = Canvas(self.fenetre)
        self.hist.config(bg='grey')
        self.hist.grid(row=5,column=6,sticky='NSEW')
 
        original= Label(self.fenetre, text="Original")
        original.grid(row=7,column=1,sticky='NSEW')
 
        modifie=Label(self.fenetre,text="Modifiée")
        modifie.grid(row=7,column=4,sticky='NSEW')
 
        menubar = Menu(self.fenetre)
        menu1 = Menu(menubar, tearoff=0)
        menu1.add_command(label="Importer", command=self.importer)
        menu1.add_command(label="Enregistrer" )
        menu1.add_separator()
        menu1.add_command(label="Quitter", command=self.fenetre.quit)
        menubar.add_cascade(label="Fichier", menu=menu1)
 
        menu3 = Menu(menubar, tearoff=0)
        menu3.add_command(label="A propos")
        menubar.add_cascade(label="Aide", menu=menu3)
 
        self.fenetre.config(menu=menubar)
 
def main():
    fenetre = Tk()
    #fenetre.canevas1.create_image(20,20, image=ImageTk.PhotoImage(Image.open("C:/Users/Public/abruti.jpg")))
    app = Application(fenetre)
    fenetre.mainloop()
 
if __name__ == "__main__":
    main()
Merci d'avance,