TP 3 La photographie numérique.

Lancez spyder pour qu'il s'ouvre pendant que vous prenez connaissance des informations suivantes:


I/Récupération de la valeur des canaux d'un pixel.


A l'aide d'un programme Python, nous allons récupérer la valeur du canal rouge, du canal vert et du canal bleu d'un pixel.

Pour cela, il faut repérer le pixel qui nous intéresse. Chaque pixel a des coordonnées x, y. L'abscisse est x comme en mathématique. L'ordonnée a ses valeur positives vers le bas contrairement à ce que vous connaissé en mathématiques.

Et oui, les mathématiques sont utiles.

Le pixel de coordonnée (0,0) se trouve en haut à gauche de la photo.

repere

Si l'image fait 800 pixels de large et 600 pixels de haut, le pixel ayant pour coordonnées (400,300) sera au milieu de l'image.

Dans un premier temps, nous allons utiliser une photo de pomme qui se situe dans:

votre dossier de classe/votre nom/7 Photo/TP3

A faire vous-même 1

  1. Faites un copier coller du programme ci-dessous dans Spyder.
  2. Pensez à faire un enregistrer sous de votre programme dans:
    votre dossier de classe/votre nom/7 Photo/TP3
    Appelez le:
    pixel1
  3. Lancer le programme.

from PIL import Image
img = Image.open("pomme.jpg")
r,v,b=img.getpixel((100,250))
print("canal rouge : ",r,"canal vert : ",v,"canal bleu : ",b)
			

Ce programme vous donne le canal rouge, le canal vert et le canal bleu du pixel de coordonnées (100,250) de l'image "pomme.jpg".


Voici une analyse ligne par ligne du programme ci-dessus:

A faire vous-même 2

Modifier le programme du "A faire vous-même 1" pour afficher les valeurs des trois canaux RVB du pixel de coordonnées (250,300).

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

pixel2.


II/ Modification les valeurs des canaux d'un pixel.

Il est possible de modifier les canaux RVB d'un pixel.


A faire vous-même 3

Fermer le programme précédent sans fermer spyder.


Copier et coller le programme suivant dans Spyder.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

point1
from PIL import Image
img = Image.open("pomme.jpg") img.putpixel((250,250),(255,0,0)) img.show()

Regarder attentivement le centre de l'image, vous devriez voir un pixel rouge à la place d'un pixel vert, n'hésitez pas à faire un zoom (touche ctrl+molette).

Voici une analyse ligne par ligne du programme ci-dessus:

A faire vous-même 4

Modifier le programme du "A faire vous-même 3" afin de colorier le pixel de coocdonnées (100,250) en bleu.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

point2.


A faire vous-même 5

Fermer le programme précédent dans spyder, sans fermer spyder.

Copier et coller le programme suivant dans spyder.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

lecture.

Ce programme n'est pas très intéressant en soi, vous pouvez l'arrêter à tout moment en appuyant sur le carré rouge se trouvant dans spyder à droite dans la console ):

from PIL import Image
img = Image.open("pomme.jpg")
largeur_image=500
hauteur_image=500
for y in range(hauteur_image):
for x in range(largeur_image):
r,v,b=img.getpixel((x,y))
print("rouge : ",r,"vert : ",v,"bleu : ",b)
print("fin")

Quelques commetaires sur ce programme:

III/ Faisons de l'art.

Nous sommes désormais capable de lire les pixels un à un dans le sens de la lecture classique et de mofifier la valeur de leurs canaux. Nous pouvons donc transformer une image.

Je vous propose d'échanger les valeurs des canaux.

A faire vous-même 6

Fermer le programme précédent dans spyder, sans fermer spyder.

Copier et coller le programme suivant dans spyder.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

art.

from PIL import Image
img = Image.open("pomme.jpg")
largeur_image=500
hauteur_image=500
for y in range(hauteur_image):
for x in range(largeur_image):
r,v,b=img.getpixel((x,y))
n_r=v
n_v=b
n_b=r
img.putpixel((x,y),(n_r,n_v,n_b))
img.show()
Que fait ce programme?

A faire vous-même 7

Modifier le programme précédent pour inverser les canaux bleu et rouge, sans changer le canal vert.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

rouge_bleu

A faire vous-même 8

Si vous vous souvenez du TP1 sur l'image numérique, vous vous souvenez que pour avoir du gris, il faut que les trois canaux aient la même valeur. Je vous propose de créer une image en niveau de gris en remplaçant chaque canal par la moyenne des cannaux ((r+v+b)//3) le double slash étant là pour avoir une valeur entière.


Modifier le programme précédent pour obtnir une image en niveau de gris.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

gris.

A faire vous-même 9

Je vous propose de ne modifier qu'une partie de la photo en ajoutant des conditions.

Fermer le programme précédent dans spyder, sans fermer spyder.

Copier et coller le programme suivant dans spyder.

Pensez à faire un enregistrer sous de votre programme dans:
votre dossier de classe/votre nom/7 Photo/TP3
avant de le lancer.

Appelez le :

original.

from PIL import Image
img = Image.open("pomme.jpg")
largeur_image=500
hauteur_image=500
for y in range(hauteur_image):
for x in range(largeur_image):
r,v,b=img.getpixel((x,y))
if v>100 and y>250:
n_v=0
else :
n_v=255
img.putpixel((x,y),(r,n_v,b))
img.show()
Que fait ce programme?

A faire vous-même 10

Faites preuve de créativité, faites moi de jolies choses. Toujours au même endroit, vous sauvegarderez votre travail sous les noms art1, art 2,...