Bonsoir,
J'ai quelques exercices d'informatique à faire, certains programmes fonctionnent, mais d'autres non.
Comment pourrais-je vous envoyer par mail ce que j'ai fait ?
En effet mon professeur fréquente ce forum...
Merci pour l'aide !
Bonsoir,
J'ai quelques exercices d'informatique à faire, certains programmes fonctionnent, mais d'autres non.
Comment pourrais-je vous envoyer par mail ce que j'ai fait ?
En effet mon professeur fréquente ce forum...
Merci pour l'aide !
bonsoir,
Si tu as du codes qui ne fonctionne pas comme tu le veux, tu peux toujours le poster ici pour qu'on puisse t'aider.
A moins que dans les consignes que le professeur t'ai donné il y ai de ne pas avoir une aide quelquonque je ne vois ou est le problème.
Non, il n'a pas dit que l'on n'avait pas le droit de solliciter de l'aide, mais je crains que s'il voit cela, j'ai une mauvaise note...
Est-il possible de l'envoyer par mail à quelqu'un ? C'est assez rapide !
Merci beaucoup.
Vous trouverez finalement l'énoncé, la fonction test, et ce que j'ai fait.
Bonjour,
je n'ai pas pu regarder tout le code mais:
pour la rotation regarde bien le résultat attendu et le résultat que sort ta fonction rotation(image_tab).
pour la dilation c'est le traitement sur image_tab qui ne fonctionne pas mais fonctionne apparement sur image_tab3pour l'érosion même problème cas que la dilation. donc à mon avis si tu résous le problème de la fonction dilation tu résoudras celui de la fonction erosion.
tu peux voir la différence de résultat à l'aide de print() dans le fichier test.py et ainsi voir ce qui va pas.
Pour la rotation, il y a 2 types d'erreurs fréquentes :
- Oublier d'inverser la largeur et la hauteur (ou le faire 2 fois).
- Mal placer les pixels : un petit dessin avec qqs exemples bien choisis permet de se faire une idée. Ensuite en affichant ces pixels (avec "print"), on peut vérifier que cela colle.
Dernier conseil, appliquer la fonction sur une image ou la largeur vaut par exemple 2 fois la hauteur avec des choses bien distinctes aux 4 coins.
Salut,
image_tab_90degres[j, i, :] = image_tab[i, j, :] fabrique la transposée i.e. une symétrie sur la diagonale principale.
Ça devrait se voir en regardant ce que çà donne avec une image avant/après la transformation.
Après pour trouver ce qu'il faut faire, c'est juste prendre un simple tableau:
et réfléchir à l'opération à effectuer pour obtenir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 123 456
et non
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 36 25 14
Pour le reste, c'est pareil, papier crayon pour visualiser l'opération à effectuer puis quand çà fonctionne sur des exemples simples, on peut s'aventurer à coder quelque chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 14 25 36
- W
Bonsoir,
Merci beaucoup pour vos réponses.
J'ai réussi à régler le problème pour rotation, merci !
Par contre, pourriez-vous me dire ce qui ne va pas pour dilatation et erosion svp ?
Car là je ne vois pas du tout...
Merci beaucoup pour l'aide !
En ce qui me concerne, je vous ai déjà indiqué quoi faire: réfléchir papier/crayon avant de coder, puis une fois que vous avez une idée vous la testez sur quelques exemples, puis vous codez et si çà ne fonctionne pas ben vous relisez votre code en essayant de comprendre pourquoi çà ne fonctionne pas.
Relisez un peu çà:
Si vous n'avez pas d'idées vous ajoutez des "print" pour vous assurez que l'état de vos différentes variables est cohérent avec ce que vous attendez.
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 erosion(image_tab): image_tab2 = image_tab.copy() hauteur = len(image_tab) longueur = len(image_tab[0]) for i in range(1,hauteur-1): for j in range(1,longueur-1): a=0 voisins = [-1]*8 c=0 for i2 in range(3): for j2 in range(3): voisins[c] = image_tab2[i-1+i2 ,j-1+j2] if all(voisins): image_tab2[i,j]=255 else : image_tab2[i,j]=0 return image_tab2
note: c'est en faisant ce boulot de mise au point que vous apprenez à programmer... Si vous ne le faites pas autant attendre la correction que vous donnera le prof.
- W
Merci beaucoup pour la réponse.
Malheureusement, j'ai déjà fait depuis 1 mois ce genre de test, et je n'aboutis à rien, c'est pour erosion et pour dilatation que j'ai besoin d'aide, j'ai fait tout le reste tout seul...
Pourriez-vous me corriger ce qui ne va pas svp ?
Bonjour,
Qu'est censé faire la fonction int ? et à quel type de variable python essayez-vous d'accéder avec vos index i et j ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3)
Merci pour la réponse.
Int est censé retourner un entier.
Par contre pour i et j ne vois pas où vous voulez en venir ?
Désolé, mais je ne comprends déjà pas ce qu'est image_tab
Pour ma part, je pars d'une image que j'ouvre, par exemple :
Si cela t'intéresse, j'ai un cours sur le traitement de l'image ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 from PIL import Image import numpy as np nom_image = "billes.jpg" mon_image = Image.open(nom_image) cont = contour(mon_image) dilat = dilatation(mon_image) cont.show() dilat.show()
http://obelix56.free.fr/spip.php?article55
Par contre, c'est peut-être un tord, mais je n'ai pas effectué les traitements avec numpy mais directement sur les listes de listes de pixels. Je trouvais au moment de la conception que c'était plus facile à la compréhension.
Comme le dit wiztricks, attends la correction. Le fait d'avoir cherché est déjà très formateur.
Edit :
J'imagine que c'est avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 import numpy as np import imageio nom_image = "billes.jpg" mon_image = imageio.imread(nom_image) print(mon_image)
image_tab correspond à une image sous forme matricielle...
Malheureusement je ne peux pas rendre mon devoir "en l'état", c'est interdit tant qu'il reste des erreurs "en rouge"...
Voyez-vous comment enlever mon erreur ?
Merci encore.
Voilà comment on utilise image_tab :
Est-ce plus clair comme ça ?
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 from PIL import Image import numpy as np nom = "image.jpg" image = Image.open(nom) image.show() image_tab = np.array(image) def niveaux_de_gris (image_tab): L = len(image_tab) C = len(image_tab[0]) matimagegrise=np.zeros ((L,C),dtype=np.uint8) for i in range (L) : for j in range (C) : matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3) return matimagegrise def dilatation(image_tab): image_tab2=niveaux_de_gris(image_tab2) hauteur , longueur = image_tab3.shape for i in range(1,hauteur-1): for j in range(1,longueur-1): a=0 voisins = [-1]*8 c=0 for i2 in range(3): for j2 in range(3): voisins[c] = image_tab2[i-1+i2 ,j-1+j2] if any(voisins): image_tab2[i,j]=255 else : image_tab2[i,j]=0 return image_tab3 image_tab2=dilatation(image_tab) nouvelle_image = Image.fromarray(image_tab2) nouvelle_image.show() nouvelle_image.save("nouveau_"+nom)
Non, pas encore mais je ne vais pas traîner...
Premier problème : ton image en niveaux de gris ne fonctionne pas.
Voici une correction, cela pourra peut-être t'aider :
J'ai supposé que tu avais cela pour l'affichage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 def niveaux_de_gris (image_tab): L = len(image_tab) C = len(image_tab[0]) k=3 matimagegrise=np.zeros ((L,C,k),dtype=np.uint8) for i in range (L) : for j in range (C) : matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3) return matimagegrise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 nom_image = "billes.jpg" mon_image = imageio.imread(nom_image) print(mon_image) nvg = niveaux_de_gris(mon_image) print(nvg) from matplotlib import pyplot as plt plt.imshow(nvg, interpolation='nearest') plt.show()
Merci beaucoup pour la réponse.
J'ai modifié la fonction
Voici pour terminer qqchose qui fonctionne mais je ne sais pas si c'est vraiment ce que tu attends. L'énoncé précise qu'il faut convertir l'image en niveaux de gris, c'est ce que j'ai fait au début de la fonction contour.
Tu avais une grosse erreur je crois car tu avais un return de l'image initiale.
Ce code fonctionne chez moi et il n'y a pas de raison que cela ne soit pas le cas chez toi.
Comme tu peux le voir, je pars d'une image en "jpg" et celle-ci est en couleurs !
Je ne pourrai pas t'aider plus, j'ai aussi du travail...
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 def contour(image_loc): image_loc=niveaux_de_gris(image_loc) L = len(image_loc) C = len(image_loc[0]) m=3 image_loc2=np.zeros ((L,C,m),dtype=np.uint8) for i in range (1,C-1): for j in range (1,L-1): somme = 0 for i2 in range(3): for j2 in range(3): somme += image_loc[i-1+i2 ,j-1+j2] tmp = 8 * image_loc[i,j] - somme for k in range(len(tmp)): if tmp[k]>255: tmp[k]=255 elif tmp[k]<0: tmp[k]=0 image_loc2[i,j] = tmp return image_loc2 def niveaux_de_gris (image_tab): L = len(image_tab) C = len(image_tab[0]) m=3 matimagegrise=np.zeros ((L,C,m),dtype=np.uint8) for i in range (L) : for j in range (C) : matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3) return matimagegrise #from PIL import Image import numpy as np from PIL import Image nom_image = "billes.jpg" image = Image.open(nom_image) image.show() mon_image = np.array(image) nvg = niveaux_de_gris(mon_image) nouvelle_image = Image.fromarray(nvg) nouvelle_image.show() cont = contour(mon_image) nouvelle_image = Image.fromarray(cont) nouvelle_image.show() #dilat.show()
Bon courage.
Merci infiniment !
Maintenant, comment pourrais-je obtenir une fonction dilatation et une fonction erosion justes ?
Partager