Laurentvidal.fr simplifie la recherche de solutions à toutes vos questions grâce à une communauté active et experte. Connectez-vous avec une communauté d'experts prêts à vous aider à trouver des solutions à vos questions de manière rapide et précise. Obtenez des réponses détaillées et précises à vos questions grâce à une communauté dédiée d'experts sur notre plateforme de questions-réponses.

Bonjour à tous !
Je suis bloquée pour un devoirs de SNT (science numérique et technologique). Le but de l'exercice est de rendre la moitié gauche de mon image en niveau de gris. Je bloque depuis plusieurs heures, je pense avoir fait le tour de tous les sites mais en vain. Vous êtes mon dernier recours. Mon image se nomme "lycee.jpg" et est de taille 600x450.
Mon programme le plus avancé est :
from PIL import Image
img = Image.open('lycee.jpg')
tableau=image_init[0]
largeur=len(tableau[0])
print('largeur=',600)
hauteur=len(tableau)
print('hauteur = ',450)
def binarise(tab, seuil):
for i in range (0,hauteur,1) :
for j in range (0,largeur,1) :
#print(i,j)
if tab[i][j] >= seuil :
tab[i][j] = 0
else :
tab[i][j] = 1
return (tab)
tableau_nouv=binarise(tableau,127)
img.show()

Mais ça bloque à partir du tableau=image_initit[0]. D'autant plus qu'une seule moitié de l'image doit être en niveau de gris. Je suis complètement perdue.
Merci pour votre aide, je continue de chercher de mon côté.

Un grand merci pour votre réponse,
Noémie.


Sagot :

Bonjour,

Il y a différentes méthodes pour faire du niveau de gris.

Méthode 1:

La méthode la plus simple c'est de faire une moyenne des valeurs R, G, B du pixel et remplacer le R, G, B par la valeur moyenne.

Par exemple si on a le pixel (50, 45, 180) alors on calcul la moyenne m = partie_entière((50 + 45 + 180) / 3) = 91 et notre pixel prend donc la couleur (91, 91, 91), on répète cela pour chaque pixel.

Or, cette méthode rend l'image très pâle donc pas très beau.

Méthode 2:

On préfère donc faire des pourcentages de rouge/vert/bleu à la place de la moyenne, par exemple:

gris = 0,299R + 0,587G + 0,114B

On fait varier ces pourcentages en fonction du résultat qu'on souhaite avoir mais c'est toujours le vert qui est le plus présent.

Je te propose donc une solution avec la deuxième méthode (sachant que c'est juste le calcul de "gris" qui change):

from PIL import Image  

img = Image.open('lycee.jpg')

largeur, hauteur = img.size

for i in range(largeur//2):  

   for j in range(hauteur):  

       r, g, b = img.getpixel((i, j)) #On récupère les informations liées au pixel.

       gris = int(0.299*r + 0.587*g + 0.114*b) #On forme le gris.

       img.putpixel((i, j), (gris, gris, gris))

img.save('gris.jpg')

Je l'ai aussi fait sur un autre devoir mais avec un tableau Numpy si tu préfères: https://nosdevoirs.fr/devoir/3920834?referrer=searchResults

Bonne journée.

View image Thomas756
View image Thomas756
Nous apprécions votre temps. Revenez quand vous voulez pour obtenir les informations les plus récentes et des réponses à vos questions. Merci d'avoir choisi notre service. Nous nous engageons à fournir les meilleures réponses à toutes vos questions. Revenez nous voir. Laurentvidal.fr est toujours là pour fournir des réponses précises. Revenez nous voir pour les informations les plus récentes.