Utiliser des algorithmes pour modifier une image Thème 4 TP2 Image Numérique "L

Utiliser des algorithmes pour modifier une image Thème 4 TP2 Image Numérique "Le monde va mal, très mal on ne se met pas à la place des autres. Et si on inventait un dispositif qui permettait de voir le monde à travers les yeux d'un autre comme un daltonien, un bébé, un chat…" Pour mieux comprendre de quoi il s'agit, visionnez la vidéo : http://www.lumni.fr/video/photographie-numerique-du-reel-aux-pixels Vous allez petit à petit en arriver à créer un programme, en Python, qui ouvrira une image et en modifiera les couleurs des pixels pour qu'elle corresponde à ce que voit un chat puis un daltonien. Activité 1 : Afficher les quantités de Rouge, Vert et Bleu d'un pixel 1. A partir du code ci-dessous et des commentaires, essayez de deviner ce que va faire le programme 1. Programme 1 Commentaires from PIL import Image mon_image = Image.open("pomme.jpg") r,v,b=mon_image.getpixel((100,250)) print("rouge :",r,"vert :",v,"bleu :",b) On importe les outils Image (avec un grand I) de la bibliothèque PIL. On crée une variable mon_image contenant les données des pixels de l'image "pomme.jpg" r, v, b, sont trois variables contenant la quantité de rouge, de vert et de bleu du pixel de coordonnées (100,250). On affiche à l'écran du texte et la valeur contenue dans r, dans v et dans b. 2. Vous allez maintenant écrire ce programme dans un navigateur : Dans Chrome, saisir l’adresse https://repl.it/ Une fois sur le site, cliquez sur puis saisir les codes d’accès ci-contre : puis cliquez sur puis . Suivez les étapes 1 à 5 ci-dessous pour obtenir l'affichage suivant : 1 : zone dans laquelle vous devez écrire le programme, 2 : bouton permettant de lancer l'exécution du programme, 3 : zone d'affichage des résultats, si le programme doit afficher quelque chose. C'est ici aussi que peuvent apparaître des messages d'erreur. Dans votre cas, un message rouge doit apparaître indiquant, à la fin : FileNotFoundError: [Errno 2] No such file or directory: 'pomme.jpg'. Que signifie ce message à votre avis ? 4 : zone contenant le programme (c'est le fichier main.py) et les fichiers utilisés par le programme. Mais c'est bien sûr, il manque le fichier pomme.jpg. 5 : bouton à utiliser pour télécharger (upload file) un fichier. Cliquer sur le bouton de la zone 5 pour télécharger le fichier pomme.jpg. Ce fichier se trouve dans le dossier de votre classe : 2nde/document en consultation/SNT/theme4. Reste à cliquer sur RUN, pour voir apparaître le message : " rouge : 133 vert : 168 bleu : 3 " Ce programme affiche donc les quantités de rouge, de vert et de bleu du pixel de coordonnées (100, 250). 1 Remarque : L’origine du repère est située en haut à gauche de l’image. Les coordonnées augmentent en allant vers la droite et le bas. Voir ci-contre un exemple pour une image de 800 par 600 pixels. Attention, dans notre cas, l'image fait 500 par 500 pixels. 3. Modifiez le programme pour qu'il affiche les valeurs du rouge, du vert et du bleu du pixel de coordonnées (250,300). Activité 2 : Modifier les quantités de Rouge, Vert et Bleu d'un pixel 1. A partir du code ci-dessous et des commentaires, essayez de deviner ce que va faire le programme 2. Programme 2 Commentaires from PIL import Image mon_image = Image.open("pomme.jpg") mon_image.putpixel((250,250),(255,0,0)) mon_image.save("pommepixelr.bmp") On sélectionne le pixel de coordonnées (250,250) et on change les quantités de Rouge (255), Vert (0) et Bleu (0). On sauvegarde la nouvelle image. 2. Dans repl.it, effacez votre ancien programme, puis saisissez le programme n°2. Enfin testez-le avec RUN. Un nouveau fichier va apparaître dans la colonne de gauche, nommé pommepixelr.bmp . Cliquez dessus pour afficher son contenu à l’écran. Puis cliquez sur Click here to download (au dessus de l’image) pour télécharger l'image pommepixelr.bmp. Ouvrez l'image avec Paint et faites un zoom. Vous devriez voir un pixel rouge au milieu de la pomme. Remarque : (255, 0, 0) est le code correspondant au rouge. Ce programme a donc permis de modifier la couleur du pixel de coordonnées (250,250). 3. Cliquez sur main.py, pour revenir au code du programme. Puis, modifiez le programme afin de colorier le pixel de coordonnées (100,250) en bleu. 4. A partir du code ci-dessous et des commentaires, essayez de deviner ce que va faire le programme 3. Programme 3 Commentaires from PIL import Image mon_image = Image.open("pomme.jpg") for i in range (0,500): mon_image.putpixel((i,250),(0,255,0)) mon_image.save("pommepixelv.bmp") On crée une boucle dans laquelle la variable i va prendre les valeurs entières de l'intervalle [0; 500[ c'est à dire de 0 à 499. Dans la boucle, on colorie en vert les pixels de coordonnées (i, 250). 5. Dans repl.it, effacez votre ancien programme, puis saisissez le programme n°3, enfin testez-le avec RUN. Affichez le fichier pommepixelv.bmp pour voir les modifications apportées par votre programme. 6. Modifier votre programme pour qu'il ajoute un cadre vert (133, 168,3) à 10 pixels des bords de l'image pomme.jpg, comme ci-contre. 2 Activité 3 : Utiliser une double boucle ( ou boucles imbriquées) 1. A partir du code ci-dessous et des commentaires, essayez de deviner ce que va faire le programme 4. Programme 4 Commentaires 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("pixel :",(x,y),"rouge : ",r,"vert : ",v,"bleu : ",b) On crée 2 variables contenant la largeur et la hauteur de l'image. Pour chaque valeur entière de y de 0 à 499 : Pour chaque valeur entière de x de 0 à 499 : On récupère les quantités de R, V et B du pixel (x,y) Puis on affiche les coordonnées du pixel et les valeurs r,v et b. 2. Dans repl.it, effacez votre ancien programme, puis saisissez le programme n°4. Enfin testez-le avec RUN. ATTENTION : l'exécution complète de ce programme n'est pas très intéressante en soi, vous pouvez l'arrêter à tout moment en cliquant sur A votre avis, combien de couples de valeur r, v et b seront affichées ? Dit autrement, combien de lignes le programme devrait-il afficher ? Les compter une par une n'est pas vraiment une bonne idée… (réponse dans un coin de la page) Ce programme contient une double boucle. On pourrait la décrire de la manière suivante : Pour y=0 (ligne du haut), et pour toutes les valeurs de x allant de 0 à 499 (donc de gauche à droite sur l'image), on récupère les valeurs R, V et B du pixel et on les affiche à l'écran. Puis on recommence avec y=1, puis 2… On balaie ainsi tous les pixels de l'image comme si on lisait un texte, du coin en haut à gauche au coin en bas à droite, et pour chaque pixel on affiche ses valeurs r, v et b. Activité 4 : Négatif 1. A partir du code ci-dessous et des commentaires, essayez de deviner ce que va faire le programme 5. Programme 5 Commentaires 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=255-r n_v=v n_b=b img.putpixel((x,y),(n_r,n_v,n_b)) img.save("pommenegatif.bmp") Pour chaque ligne : Pour chaque colonne de cette ligne : On récupère les quantités de rouge, vert et bleu On calcule de nouvelles quantités de rouge, vert, bleu. On insère ces nouvelles valeurs pour le pixel considéré. On sauvegarde l'image 2. Dans repl.it, effacez votre ancien programme, puis saisissez le programme n°5. Enfin testez-le avec RUN. Dans ce programme, la quantité de rouge de chaque pixel a été modifiée, inversée. Faites de même pour la quantité de vert et la quantité de bleu. Testez votre programme. Quel est l’effet de ce programme sur votre image ? 3 500x500 Ceci n’est qu’une même phrase, à écrire sans retour à la ligne. Activité 5 : Le chat Les chats ne possèdent que deux types de cônes; S (Small) et M (Medium), dont 80 à 90% de cônes M et 10 à 20% de cônes S. -Les cônes S possèdent un photopigment sensible aux courtes longueurs d'ondes et ont un maximum de sensibilité aux alentours de 447 nm; les chats sont donc sensibles à la couleur bleue. -Les cônes M possèdent eux un photopigment sensible aux moyennes longueurs d'ondes et ont un maximun de sensibilité aux alentours de 554 nm; les chats sont donc sensibles également à la couleur verte. Le chat ne possède pas le troisième type de cône L (Large) qui est chez l'homme pour la couleur rouge. Ainsi, leurs palettes de couleur tourne autour du bleu et du vert avec des couleurs plutôt pastels. le spectre félin le spectre humain 1. Compléter le code ci-dessous de manière à ce que la couleur rouge n'apparaisse plus sur l'image. L'image obtenue sera alors proche de ce que verrait un chat. Programme 6 Commentaires 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= n_v=v n_b=b img.putpixel((x,y),(n_r,n_v,n_b)) img.save("pommechat.bmp") On crée 2 variables contenant la largeur et la hauteur de l'image. Pour chaque valeur entière de y de 0 à 499 : Pour chaque valeur entière de x de uploads/s3/ activite2-python.pdf

  • 53
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager