2-programmation

mardi 20 juin 2023
par  Florent Girod

Programmes en python

comprendre

Lire ce programme (les commentaires en particulier) pour comprendre son fonctionnement.

Conseil : le copier/coller dans un éditeur de programme python (Edupython ou Pyzo), il sera plus lisible.

"""IMPORTANT : l'image importée devra se trouver dans le même fichier que ce programme. L'image modifiée sera elle aussi enregistrée dans ce dossier"""

#importation obligatoire pour utiliser la fonction analysant le code RGB pixel par pixel d'une image
from PIL import Image

#nom de l'image à saisir A MODIFIER
imageSource=Image.open("paysage.jpg")
#prend en compte la largeur de l'image et sa hauteur
largeur,hauteur=imageSource.size
#définie une nouvelle image vierge de même dimension
imageTraitee=Image.new("RGB",(largeur,hauteur))

# y varie de 0 à (hauteur-1) et x varie de 0 à (largeur-1)
for y in range(hauteur):
 for x in range(largeur):

   p=imageSource.getpixel((x,y)) # p est la valeur RGB du pixel de l'image de départ
   r=p[0]#première valeur de la liste p -> niveau de r
   v=p[1]#deuxième valeur de la liste p -> niveau de v
   b=p[2]#troisième valeur de la liste p -> niveau de b

##on applique la transformation : PARTIE A MODIFIER SELON LA TRANSFORMATION VOULUE
#le niveau de gris est la moyenne des valeurs de r, g, b ; attention, ce doit être un nombre entier
   g=int((r+v+b)/3)
#on affecte directement les trois valeurs dans la liste (tuple) p ce qui correspond aux valeurs r, g, b de la nouvelle image
   p=(g,g,g)
###
# on affecte les valeurs de de p dans la nouvelle image pour la créer
   imageTraitee.putpixel((x,y),p)
#on nomme la nouvelle image pour l'enregistrer
imageTraitee.save("paysage_gris.jpg")
#on visulaise cette nouvelle image
imageTraitee.show()

observer

faire tourner ce programme et visualiser l’effet obtenu

remarque  : le temps de compilation peut être long (de l’ordre de la dizaine de secondes) si votre image est ’lourde’.

réponse

JPEG - 92.3 ko JPEG - 85.8 ko
image originale
image après traitement

agir

A vous de créer un programme pour obtenir le négatif d’une image

réponse

"""IMPORTANT : l'image importée devra se trouver dans le même fichier que ce programme. L'image modifiée sera elle aussi enregistrée dans ce dossier"""

#importation obligatoire pour utiliser la fonction analysant le code RGB pixel par pixel d'une image
from PIL import Image

#nom de l'image à saisir A MODIFIER
imageSource=Image.open("paysage.jpg")
#prend en compte la largeur de l'image et sa hauteur
largeur,hauteur=imageSource.size
#définie une nouvelle image vierge de même dimension
imageTraitee=Image.new("RGB",(largeur,hauteur))

# y varie de 0 à (hauteur-1) et x varie de 0 à (largeur-1)
for y in range(hauteur):
 for x in range(largeur):

   p=imageSource.getpixel((x,y)) # p est la valeur RGB du pixel de l'image de départ
   r=p[0]#première valeur de la liste p -> niveau de r
   v=p[1]#deuxième valeur de la liste p -> niveau de v
   b=p[2]#troisème valeur de la liste p -> niveau de b

##on applique la transformation : PARTIE A MODIFIER SELON LA TRANSFORMATION VOULUE
#le négatif d'une image s'obtient en appliquant la fonction tonale x->255-x
   r=255-r
   v=255-v
   b=255-b
#on affecte directement les trois valeurs dans la liste (tuple) p ce qui correspond aux valeurs r, g, b de la nouvelle image
   p=(r,v,b)
###
# on affecte les valeurs de de p dans la nouvelle image pour la créer
   imageTraitee.putpixel((x,y),p)
#on nomme la nouvelle image pour l'enregistrer
imageTraitee.save("paysage_neg.jpg")
#on visulaise cette nouvelle image
imageTraitee.show()
JPEG - 92.3 ko JPEG - 1.6 Mo
image originale
négatif