Créer image PGM
Résolu
bendrop
Messages postés
19166
Date d'inscription
Statut
Contributeur
Dernière intervention
-
bendrop Messages postés 19166 Date d'inscription Statut Contributeur Dernière intervention -
bendrop Messages postés 19166 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous.
Je dois créer une image pgm sous python.
Voici mon code:
Je suis censé obtenir cela:

mais à la place j'ai un fichier pgm inexploitable.
Je ne vois pas où est mon erreur car le programme s'exécute sans erreur.
Merci pour l'aide apportée.
Je dois créer une image pgm sous python.
Voici mon code:
#je cree un fichier pgm
def cree_image(fichier):
fichier=open(fichier,"w")
# pour specifier que je vais creer une image en niveaux de gris
fichier.write("P2\n")
# de 800 pixels sur 800 pixels
fichier.write("800 800\n")
# chacune des valeurs de 0 a 255 correspond a un niveau de gris
fichier.write("255\n")
# pour chacun des 800 x 800 pixel de l image je lui affecte un nombre egal au carré de la distance de ce point au point origine
for j in range (0,800):
# je calcule modulo 255 pour se ramener dans l intervalle 0 255
for i in range (0,800):
fichier.write(str((i**2+j**2)%255))
fichier.write("\n’")
fichier.close()
cree_image("resultat.pgm")
Je suis censé obtenir cela:

mais à la place j'ai un fichier pgm inexploitable.
Je ne vois pas où est mon erreur car le programme s'exécute sans erreur.
Merci pour l'aide apportée.
Configuration: Linux / Firefox 99.0
A voir également:
- Créer image PGM
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Créer une image iso - Guide
- Créer un compte gmail - Guide
2 réponses
Re bonjour bendrop,
Voici comment j'aurais écrit ton programme (et là, le résultat est correct) :
Je te laisse comparer le résultat obtenu avec les deux programmes pour comprendre où est ton erreur.
Bonne chance
Voici comment j'aurais écrit ton programme (et là, le résultat est correct) :
#!/usr/bin/env python3
import sys
def write_pgm(filename, w=800, h=800, n=255):
with open(filename, "w") as f:
print(
"\n".join([
"P2",
" ".join([str(w), str(h)]),
str(n),
"\n".join(
" ".join(
str((i ** 2 + j ** 2) % n)
for j in range(w)
)
for i in range(h)
)
]),
file=f
)
write_pgm("resultat.pgm")
Je te laisse comparer le résultat obtenu avec les deux programmes pour comprendre où est ton erreur.
Bonne chance
Bonjour,
Si tu ouvres ton fichier, tu comprendras le problème ;
Par ailleurs, tu peux améliorer ton programme comme suit
Le fichier devient exploitable avec la première correction, mais même si le rendu ressemble à ce que tu attends, ce n'est pas le résultat que tu attends. Vérifie qu'il y a le bon nombre de valeurs pour chaque ligne.
Bonne chance
Si tu ouvres ton fichier, tu comprendras le problème ;
- Il manque des espaces entre les valeurs assignées à chacun de tes pixels.
Par ailleurs, tu peux améliorer ton programme comme suit
- Pour ouvrir et fermer le fichier, il vaudrait mieux utiliser un context manager (en python :
with open("resultat.pgm") as f:) - Pour écrire dans ton fichier, tu peux directement utiliser ton descripteur de fichier avec
print
:print("plop", file=f)). Il est possible d'omettre le retour chariot en cas de besoin (print("plop", end="")).
Le fichier devient exploitable avec la première correction, mais même si le rendu ressemble à ce que tu attends, ce n'est pas le résultat que tu attends. Vérifie qu'il y a le bon nombre de valeurs pour chaque ligne.
Bonne chance
Je regarderai cela de près.
Cordialement.