Bonjour pourriez vous m'aider avec ces deux exercices en SNT ? C'est sur la photo numérique et c'est a rendre avant jeudi s'il vous plait. Voici le code phyton concerné :
Lecture d'un fichier au format .jpg Traitement de l'erreur à l'ouverture du fichier Trame de départ """ from PIL import Image # Module de traitement d'images import sys imageFile = "Lena.jpg" # On essaye d'ouvrir l'image indiquée try: img = Image.open(imageFile) # Si on rencontre une erreur d'entrée ou de sortie (I/O) except IOError: print("Erreur à l'ouverteur du fichier" + imageFile) sys.exit(1) # Affichage des caractéristiques de l'image print("Format :", img.format, ", taille :", img.size, ", mode :", img.mode) # On regarde la largeur et la hauteur larg_image = img.width haut_image = img.height # On veut une nouvelle image avec # une nouvelle taille identique à la précédente # un mode définit dans la 'nouv_image' nouv_taille = (larg_image, haut_image) nouv_image = Image.new("L", nouv_taille) for y in range(haut_image): for x in range(larg_image): r, v, b = img.getpixel((x, y)) #174 nouv_image.save("Lena_Gris_moyen1.jpg", quality = 200) Voici les énoncé :
La conversion en niveau de gris peut se faire pixel par pixel.
Un pixel RGB (RED GREEN BLUE) (RVB : Rouge Vert Bleu)
est défini par un triplet (r, v, b) de 3 entiers compris entre 0 et 255
Pixel par pixel, on peut faire la moyenne :
(r+v+b)/3 pour créer une image en "greyscale", échelle de gris.
On peut aussi utiliser d'autres formules :
recommandation 601 de la Commission Internationale de l’Éclairage, qui a pour formule da conversion de l’espace couleur RGB (Rouge Vert et Bleu) vers le niveau de gris par :
L = R * 0.299 + G * 0.587 + B * 0.114
C'est cette "moyenne pondérée" qui est utilisée par la fonction convert
du module PILlow . On va voir qu'elle est rapide.
Rapidité :
Je mesure le temps d'exécution (voir les print Durée :)
Lista de comentários
Verified answer
Réponse :
Explications :
La conversion en niveau de gris peut se faire pixel par pixel.
Un pixel RGB (RED GREEN BLUE) (RVB : Rouge Vert Bleu)
est défini par un triplet (r, v, b) de 3 entiers compris entre 0 et 255
Pixel par pixel, on peut faire la moyenne :
(r+v+b)/3 pour créer une image en "greyscale", échelle de gris.
On peut aussi utiliser d'autres formules :
recommandation 601 de la Commission Internationale de l’Éclairage, qui a pour formule da conversion de l’espace couleur RGB (Rouge Vert et Bleu) vers le niveau de gris par :
L = R * 0.299 + G * 0.587 + B * 0.114
C'est cette "moyenne pondérée" qui est utilisée par la fonction convert
du module PILlow . On va voir qu'elle est rapide.
Rapidité :
Je mesure le temps d'exécution (voir les print Durée :)
Remarques :
Dans le doute : j'ai pensé que "Gris moyenne", c'est (r+v+b) /3 , que "Gris rapide", c'était en utilisant Convert, la fonction intégrée.
Pour "gris vrai, je n'ai pas trouvé d'infos sur le web".
Je pense que ces 3 définitions sont spécifiques à ton cours (le livre) ou à ton exercice (le livre).
N'hésite pas à corriger.
Si tu veux teste le code, sur PC :
cherche "trinket python3" , interpréteur en ligne.
Copie le code, exécute-le.
Attention ! les espaces comptent.
CODE
from PIL import Image # Module de traitement d'images
import sys # gestion des exceptions
import time # temps d'execution
#conversion en gris
#projet : https://trinket.io/python3/f2d5429b17
imageFile = "Lena.jpg" #https://en.wikipedia.org/wiki/Lenna
# On essaye d'ouvrir l'image indiquée
try:
img = Image.open(imageFile)
# Si on rencontre une erreur d'entrée ou de sortie (I/O)
except IOError:
print("Erreur à l'ouverture du fichier" + imageFile)
sys.exit(1)
# Affichage des caractéristiques de l'image
print("Format :", img.format, ", taille :", img.size, ", mode :", img.mode)
# On regarde la largeur et la hauteur
larg_image = img.width
haut_image = img.height
#==================================================================
start = time.time()
print ("image gris moyenne L = (R+V+B)/3")
# On veut une nouvelle image avec
# une nouvelle taille identique à la précédente
# un mode définit dans la 'nouv_image'
# En savoir plus : https://codatik.com/convertir-une-image-au-niveau-de-gris/
nouv_taille = (larg_image, haut_image)
#mode "L" :(8-bit pixels, grayscale)
# voir https://pillow.readthedocs.io/en/stable/handbook/concepts.html#concept-modes
nouv_image = Image.new("L", nouv_taille)
for y in range(haut_image):
for x in range(larg_image):
r, v, b = img.getpixel((x, y))
L= (r+v+b)/3
nouv_image.putpixel ((x, y), int(L))
#174
nouv_image.save("Lena_Gris_moyen.jpg", quality = 200)
nouv_image.show()
end = time.time()
print ("Durée (secondes): " ,end-start)
#==================================================================
start = time.time()
print ("image gris methode rapide : fonction CONVERT")
#Convertir l'image au niveau de gris avec la fonction integree
# voir https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.convert
# When translating a color image to greyscale (mode “L”), the library uses
# the ITU-R 601-2 luma transform:
# L = R * 299/1000 + G * 587/1000 + B * 114/1000
# au lieu de faire une simple moyenne (R+V+B)/3
imageGris = img.convert("L")
imageGris.save("Lena_Gris_convert.jpg", quality = 200)
imageGris.show()
end = time.time()
print ("Durée (secondes): " ,end-start)
#==================================================================
start = time.time()
print ("image gris vrai pas fait .Ici Canal VERT ")
# On veut une nouvelle image avec
# une nouvelle taille identique à la précédente
# un mode définit dans la 'nouv_image'
# En savoir plus : https://codatik.com/convertir-une-image-au-niveau-de-gris/
nouv_taille = (larg_image, haut_image)
#mode "L" :(8-bit pixels, grayscale)
# voir https://pillow.readthedocs.io/en/stable/handbook/concepts.html#concept-modes
nouv_image = Image.new("L", nouv_taille)
for y in range(haut_image):
for x in range(larg_image):
r, v, b = img.getpixel((x, y))
L= v
nouv_image.putpixel ((x, y), int(L))
#174
nouv_image.save("Lena_Gris_vert.jpg", quality = 200)
nouv_image.show()
end = time.time()
print ("Durée (secondes): " ,end-start)