Créer image PGM
Résolu
bendrop
Messages postés
19137
Statut
Contributeur
-
bendrop Messages postés 19137 Statut Contributeur -
bendrop Messages postés 19137 Statut Contributeur -
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.