Partage

[Python] Creer une image .ppm

Le 6 avril 2008 à 17:38:39

Salut. Alors voila je suis de la fac de Bx 1 et j'ai un petit sussi. Alors voila je veux creer une image ppm avec cette fonction:

  1. def creer_image_ppm(t,nb_couleurs,nom):
  2.     x=len(t[0])
  3.     z=len(t)
  4.     nb_couleurs=tableau_couleurs(nb_couleurs)
  5.     fichier=open(nom,'w')
  6.     fichier.write('P3\n')
  7.     fichier.write(str(x)+ ' ' + str(z) + '\n')
  8.     fichier.write('255\n') ##<---- 1
  9.     for i in range(len(nb_couleurs[0])):
  10.     for j in range(len(nb_couleurs)):
  11.             fichier.write(str(t[i][j])+' ') ##<---- 2
  12.     fichier.close()



L'ennonce: le tableau t comporte pour chaque element un nombre compris entre 0 et nb_couleurs-1. Les couleurs sont tirees aleatoirement (fonction tableau_couleurs). Chaque pixel (represente par un tableau comprenant trois nombres entre 0 et 255) compsant l'image peut etre obtenu a partir des donnees precedentes).

Mais comme j'ai eu du mal a comprendre le fonctionnement de ces fonctions pour creer les images il y a quelque chose qui plante. Mon image n'est pas en couleur et m'affiche soit rien soit n'importe quoi. Je pence que je me trompe dans l'etape 1 ou 2 (cf plus haut). Pouvez vous m'aider svp?? Merci.

P.S la fonction tableau_couleur
  1. def tableau_couleurs(n):
  2.     t=[]
  3.     for i in range(n):
  4.         t+=[[randrange(0,255),randrange(0,255),randrange(0,255)]]
  5.     return t

Publicité
Le 6 avril 2008 à 17:38:39
Le 6 avril 2008 à 18:23:08

Salut" collègue ;)

Le problème est ici :
  1. for i in range(len(nb_couleurs[0])):
  2.       for j in range(len(nb_couleurs)):
  3.          fichier.write(str(t[i][j])+' ')

Les limites des boucles doivent être les tailles des dimensions du tableaux, sinon comment veux-tu l'écrire dans sa totalité ?
Ca devient :
  1. for i in range(z):
  2.       for j in range(x):

----
Ensuite, A quel moment te sers-tu du tableau de couleur ?
Car le but de la fonction c'est quand même d'écrire des couleurs.

..ce qu'il faut comprendre la dedans :

Citation :

le tableau t comporte pour chaque element un nombre compris entre 0 et nb_couleurs-1.


C'est qu'on doit générer autant de couleurs qu'il y a de relais (puisque chaque case de t contient l'indice du relais le plus proche, 0 <= valeur_case < nb_relais).
Donc pour chaque case correspond :
-> un relais (dans le tableau du même nom)
-> une couleur (dans le tableau retourné par tableau_couleurs()).
C'est le dernier point qui nous intéresse : on peut alors se servir de la valeur de chaque case de t comme indice dans le tableau de couleurs. ( c'est ce qu'il faut faire pour l'étape 2 ;) )
Le 6 avril 2008 à 20:36:34

:) Mais justement c'est sur l'etape de tableau_couleurs que je bloque. Je ne vois pas vraiment ou le placer pour que la fonction me retourne une image avec autant de coulers que de relais. Pfff j'en ai marre c'est pas tres complique en plus et je bloque dessus et ben..... :(
Si je comprends bien ce que j'ai fait pour l'etape 2 n'est pas tres juste?? Car c'est a ce moment la que je dois caser la tableau_couleurs? C'est justement a cette etape la qu'il doit mettre des couleurs dans mon image non??
Le 6 avril 2008 à 22:57:21

Citation :

Si je comprends bien ce que j'ai fait pour l'etape 2 n'est pas tres juste?? Car c'est a ce moment la que je dois caser la tableau_couleurs? C'est justement a cette etape la qu'il doit mettre des couleurs dans mon image non??


Oui :)

En fait, ce que tu as fais :
  1. fichier.write(str(t[i][j])+' ')

Ca fonctionnait bien dans la première image qu'on avait à générer, celle en niveau de gris.
Pourquoi ? car les données contenu dans t correspondaient à ce qu'il y avait à écrire dans le pgm (soit chaque pixel représenté par un entier entre 0 et 255).
Maintenant ce n'est plus le cas : notre tableau contient des 'indices', et les données qui nous intéressent elles, se trouvent dans le tableau des couleurs aux indices en question.

Pour prendre un exemple, peut être tordu, mais que je trouve plus parlant :

---
On veut représenter une séquence d'ADN, le premier truc qui vient à l'esprit c'est tout bêtement d'écrire la séquence en question :

A C G T T G A (c'est ce qu'on a fait dans le cas de l'image en niveau de gris)

Une deuxième solution, serait de mettre les quatre bases dans un tableau, et de s'y référer par leur position

base (c'est l'équivalent de notre tableau de couleur)
0 -> A
1 -> T
2 -> G
3 -> C

et notre séquence devient : (équivalent du tableau t)

0 3 2 1 1 2 0

Et pour accéder au élément dans le même ordre, on procèdera ainsi (ce qu'il faut faire ;) ):

base[0]; base[3]; base[2]; base[1]; base[1]; base[2]; base[0]

---

L'idée est là, après dans notre cas c'est un tout petit peu plus compliqué puisqu'on travail avec des tableaux à plusieurs dimensions.

Que tu n'ais pas compris comment fonctionne la fonction tableau_couleurs() n'est pas important en soi (à part peut être pour les exam :p ), ce qui est important c'est que tu saches ce qu'elles te renvoies.

Bon courage ;)
Le 8 avril 2008 à 18:49:03

Salut et merci pour ton aide. Grâce a toi j'ai trouve.
anonyme
Photo
Le 9 avril 2008 à 7:37:24

pense a mettre resolut alors ;)

[Python] Creer une image .ppm

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown