<?xml version="1.0" encoding="UTF-8"?>

<upm-export>
	<title>Enseignement de l&#039;informatique et du numérique au lycée Boissy d&#039;Anglas</title>
	<link>https://icn-isn-boissy.yj.fr/wp</link>
	<description></description>
	<pubDate>Wed May 6 10:41:28 2026 / +0000  GMT</pubDate>
	<generator>Universal Post Manager 1.1.2 [ www.ProfProjects.com ] </generator>
	<language></language>
	
			<item>
			<title>Programmation du traitement d’image avec python</title>
			<link>https://icn-isn-boissy.yj.fr/wp/?p=2610</link>
			<pubDate>Wed May 6 10:41:28 2026 / +0000  GMT</pubDate>
			<guid isPermaLink="false">https://icn-isn-boissy.yj.fr/wp/?p=2610</guid>
			<content-encoded><![CDATA[<!-- wp:paragraph -->
<p>Dans la section
précédente, vous avez utilisé un logiciel de traitement d'image (Photofiltre)
qui contient différents algorithmes permettant de modifier automatiquement des
images. Dans un appareil photo ou un smartphone, il y a aussi de tels types
d'algorithmes. Ici, vous allez programmer vous-mêmes en Python différents
algorithmes permettant de modifier des images.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"textColor":"green"} -->
<p class="has-green-color has-text-color"><strong>INDISPENSABLE</strong> : Pour travailler avec Python, il faut créer un répertoire (par exemple <em>travail</em>) dans lequel vous enregistrerez à la fois vos fichiers Python (format .py) et vos images (format .png)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"textColor":"green"} -->
<p class="has-green-color has-text-color">A la fin
de la section, vous zipperez (= clic droit &gt; compresser) ce répertoire
contenant l'intégralité des fichiers .py et .png pour nous le rendre avec votre
compte-rendu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A faire vous-même 0&nbsp;: Configurer le logiciel Thonny dans lequel on va programmer en Python</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ouvrez le logiciel <em>Thonny</em> (faire une recherche avec la loupe)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une boite de dialogue apparaît avec le message suivant  : "Can't find backend 'LocalCPython'. Please select another backend from options"</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>ouvrir le menu Outils &gt; Options &gt; Onglet Interpéteur </li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>choisir l'option par défaut  :<em> "Le même interpréteur qui exécute Thonny"</em></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Ensuite, il est nécessaire d'importer la librairie PILLOW (Python Imaging Library) qui fournit les outils nécessaires pour les manipulations d'images :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>de nouveau, ouvrir le Menu Outil &gt; Gérer les paquets...</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>écrire  "Pillow" dans la barre de recherche et cliquer sur rechercher</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Cliquer sur le lien "pillow" dans la liste obtenue</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A faire vous-même 1 : Créer une image avec Python</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici un script qui
génère deux images en couleurs RVB (=RGB en anglais) de dimension 100 x 100. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Tapez-le dans l'éditeur de script de Thonny (fenêtre du haut) et enregistrez-le sous le nom </strong><em>afvm1.py</em> <strong>dans votre dossier de travail</strong> <strong>créé précédemment.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Exécutez le script</strong> (icône "lecture")</p>
<!-- /wp:paragraph -->

<!-- wp:verse -->
<pre class="wp-block-verse"><code>from PIL import Image
im=Image.new("RGB", (100, 100)) 
im2= Image.new("RGB", (100, 100), (255,255,255))
im.save("afvm1_1.png")
im2.save("afvm1_2.png") </code></pre>
<!-- /wp:verse -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Vérifiez que vous avez 2 images créées dans le dossier de travail</strong> <em>(sinon demander de l'aide)</em></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Lancez le logiciel Photofiltre et ouvrez les 2 images créées</strong></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Expliquez
la couleur de l'image </strong><em>afvm1_1.png</em><strong></strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour modifier la couleur de l'image, il suffit de modifier la couleur de chaque pixel. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On va utiliser la commande  <code>putpixel((x,y), (a, b, c))</code>  qui permet de colorer le pixel de coordonnées (<em>x</em>, <em>y</em>) avec la couleur RVB (<em>a</em>, <em>b</em>, <em>c</em>) où <em>a</em>, <em>b</em> et <em>c</em>  sont les valeurs de luminance de chaque canal, comprises entre 0 et  255. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Remarque&nbsp;: x est le n° de colonne et y est le n° de ligne. Le 1er  pixel en haut à gauche a pour coordonnées (0,0)  </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A faire vous-même 2&nbsp;: mettre de la couleur</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Dans l'éditeur Thonny, modifiez le script précédent en ajoutant la boucle "</strong><strong>for"</strong><strong> suivante</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Attention &nbsp;!</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>respectez l'<strong>indentation</strong> qui délimite les blocs de code (Elle se fait avec la touche de tabulation «&nbsp;tab&nbsp;») </li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>n'oubliez pas les "deux-points"       <strong>:</strong>         à la fin de la ligne <code>for</code></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:verse -->
<pre class="wp-block-verse"><code>from PIL import Image</code>
<code>im=Image.new("RGB", (100, 100))</code>
<code>for x in range (100):
    for y in range(100):
        im.putpixel((x,y),(0,255,0))</code>
<code>im.save("afvm2.png")</code></pre>
<!-- /wp:verse -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Expliquez
ce que produit la boucle ajoutée sur l'image.</strong></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Remplacez
la boucle par celle donnée ci-dessous et expliquez le résultat.</strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:verse -->
<pre class="wp-block-verse"><code>for x in range (50):
    for y in range (50,100):
        im.putpixel((x,y),(0,255,0))  </code></pre>
<!-- /wp:verse -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"> A faire vous-même 3&nbsp;: coder des drapeaux </h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le script suivant permet de produire le drapeau français sous forme d'une image de dimension 120x100 pixels. Une première boucle "<code>for</code>" permet de parcourir les lignes de l'image. Les boucles <code>for</code> imbriquées (attention aux indentations) parcourent les colonnes dans un rectangle donné et y affectent une couleur.</p>
<!-- /wp:paragraph -->

<!-- wp:verse -->
<pre class="wp-block-verse"><code>from PIL import Image
col=120
lgn=100
im=Image.new("RGB", (col,lgn))
#il y a 3 bandes verticales, on définit la variable bande :
bande=col//3
for y in range (100):
    for x in range (bande):
        im.putpixel((x,y),(0,0,255))
    for x in range (bande, (2*bande)):
        im.putpixel((x,y),(255,255,255))
    for x in range ((2*bande), col):
        im.putpixel((x,y),(255,0,0))
im.save("france.png")</code></pre>
<!-- /wp:verse -->

<!-- wp:paragraph -->
<p>Après avoir compris le script précédent, vous allez le modifier pour produire d'autres drapeaux. Pensez à <strong>enregistrer votre script modifié sous un autre nom</strong> et à <strong>modifier également le nom de l'image </strong>enregistrée par python pour ne pas écraser l'image précédente.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enregistrez vos différentes versions de script jusqu'à ce que cela fonctionne. <strong>Vous joindrez vos scripts python </strong><em>afvm3-irlande et afm3-colombie </em><strong>à votre compte-rendu.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Modifiez les arguments de la commande </strong>putpixel()<strong> pour reproduire le drapeau irlandais.</strong> (pour avoir le code RGV des couleurs, vous pouvez les sélectionner sur une image avec Pixie ou avec la pipette de Photofiltre)</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Pour ceux qui aiment les défis : plus difficile : modifiez les arguments de la commande </strong>putpixel()<strong> pour reproduire le drapeau colombien</strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A faire vous-même 4&nbsp;: apporter des nuances</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Avec quelques petites astuces, on peut aussi produire des dégradés assez facilement. Voici un script qui permet d'obtenir deux dégradés de bleu différents.</p>
<!-- /wp:paragraph -->

<!-- wp:verse {"textAlign":"left"} -->
<pre class="wp-block-verse has-text-align-left"><code>from PIL import Image
largeur = 255
hauteur = 255
im=Image.new('RGB', (largeur, hauteur))
for x in range(largeur):
    for y in range(hauteur):
        im.putpixel((x, y), (0, 0, y))
im2=Image.new('RGB', (largeur, hauteur))
for x in range(largeur):
    for y in range(hauteur):
        im2.putpixel((x, y), (0, 0, x))
im.save("camaieubleu1.png")
im2.save("camaieubleu2.png")   </code></pre>
<!-- /wp:verse -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Expliquez
la ligne 7 du script précédent.</strong></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Expliquez
la différence entre les 2 images.</strong></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Modifiez
le script pour produire le dégradé suivant et enregistrer l'image sous le nom </strong><em>degrade.png</em><strong></strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:image {"align":"center","id":2626,"width":110,"height":110,"sizeSlug":"large"} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/03/dégradébleuvert.png" alt="" class="wp-image-2626" width="110" height="110" /></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans un logiciel de traitement d'image comme Photofiltre, ou celui qui est présent dans l'appareil photo, il est possible de faire des corrections automatiques comme passer l'image en négatif.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le principe de
l'algorithme est de donner pour chaque pixel la couleur inverse : cette couleur
est calculée selon le principe suivant : </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":2628,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/03/inv-1024x288.png" alt="" class="wp-image-2628" /></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A faire vous-même 5&nbsp;: l'image en négatif</h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Enregistrez
une image de votre choix dans votre répertoire de travail (pensez à choisir une
image dont la licence vous permet sa modification)</strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Voici une partie du
script permettant de créer le même effet négatif.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La commande <code>pix = img.getpixel((x,y))</code> permet d'affecter dans une variable pix &nbsp;les valeurs des canaux RVB extraites du pixel de coordonnées (x,y).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On peut exprimer ces valeurs sous forme d'un 3-tuple (c'est-à-dire une collection de 3 valeurs, ici correspondant aux 3 canaux RVG) : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>p = (pix[0], pix[1], pix[2])</code> que l'on peut affecter à une variable (ici p) pour l'utiliser ensuite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Remarque : les indices entre [ ] permettent d'accéder aux différents éléments du <em>tuple</em>. Pour accéder à un élément d'indice&nbsp; &nbsp;i&nbsp; d'un <em>tuple </em>t&nbsp;, on écrit&nbsp;&nbsp;&nbsp;&nbsp;<code>&nbsp; t[i]</code></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>On veut transformer
chaque pixel de l'image (variable</strong><strong> </strong>pix<strong>) en son négatif (variable </strong>pixneg<strong>). Trouvez comment calculer </strong>pixneg <strong>à partir
de </strong>pix<strong>.</strong><strong></strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>L'extrait de script
ci-dessous permet d'ouvrir l'image que vous avez enregistrée, puis de créer une
nouvelle image qui sera son négatif. Il manque dans le script suivant 3
lignes (respectez les indentations !) qui permettent de passer l'image en
négatif.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>À vous
de les écrire et de tester le résultat. Vous joindrez vos images et votre
script à votre compte-rendu.</strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:verse {"textAlign":"left"} -->
<pre class="wp-block-verse has-text-align-left"><code>from PIL import Image
 &nbsp;
img = Image.open(MonImage)
col,lgn = img.size
imgF = Image.new(img.mode,img.size)
print("Patientez pendant l'exécution du script …")
 &nbsp;
for x in range(col):
    for y in range(lgn):
</code>...
...
...&nbsp;<code>
print("… C'est fait !, voir le résultat avec Photofiltre")
imgF.save("image_negatif.png")   </code></pre>
<!-- /wp:verse -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Parmi les retouches d'images très utilisées pour
incruster un logo, un copyright ou une signature dans une image, il y a la
fusion de deux images. Il s'agit de transformer plus ou moins légèrement la
couleur des pixels de manière à ce que l'incrustation ne puisse pas être enlevée
facilement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'opération mathématique à appliquer pour modifier l'encodage des pixels est la suivante&nbsp;:</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":2634,"width":242,"height":88,"sizeSlug":"large"} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/03/formule.png" alt="" class="wp-image-2634" width="242" height="88" /></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>(<em>R</em><sub>1</sub>, <em>V<sub>1</sub></em>,
<em>B</em><sub>1</sub>)</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; est le
3-tuple de l'image 1, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>(<em>R</em><sub>2</sub>, <em>V</em><sub>2</sub>,
<em>V</em><sub>2</sub>)</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; est le 3-tuple
de l'image 2 </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>a</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; est le coefficient de dominance d'une image sur l'autre, dont la valeur est comprise entre 0 et 1.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A faire vous-même 6&nbsp;: fusion d'images</h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><strong>Utilisez
les informations ci-dessus pour compléter le script suivant de façon à obtenir
une fusion des drapeaux de la France et de la Colombie. </strong></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong> Astuce : les valeurs (R,V,B) d'un pixel sont obligatoirement des entiers à utilisez&nbsp;&nbsp;&nbsp;&nbsp; </strong><code>int()</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La ligne 2 indique qu'il faudra entrer la valeur de  a   dans le shell (fenêtre de droite). Vous pourrez essayer différentes valeurs de a et comparer les images produites. Dans ce cas, pensez à modifier le nom du fichier enregistré (ligne 17) sous peine d'écraser le fichier précédent.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>(Vous pouvez bien sûr utiliser des images de votre choix dans ce script, mais
les 2 images doivent avoir les mêmes dimensions)</p>
<!-- /wp:paragraph -->

<!-- wp:verse {"textAlign":"left"} -->
<pre class="wp-block-verse has-text-align-left"><code>from PIL import Image
a=float(input("Entrez la valeur de a : "))
 &nbsp;
im1 = Image.open('france.png')
im2 = Image.open('colombie.png')
 &nbsp;
largeur,hauteur = im1.size
 &nbsp;
im = Image.new('RGB', (largeur, hauteur))
    for x in range(largeur):
 &nbsp;&nbsp;     for y in range(hauteur):
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     pix1 = im1.getpixel((x,y))
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pix2 = im2.getpixel((x,y))
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fusion = .......................... 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; im.putpixel((x,y),fusion)
 &nbsp;
im.save('fusion.jpg') </code></pre>
<!-- /wp:verse -->]]></content-encoded>
			<excerpt-encoded><![CDATA[]]></excerpt-encoded>
			<wp-post_id>2610</wp-post_id>
			<wp-post_date>2020-03-12 19:57:43</wp-post_date>
			<wp-post_date_gmt>2020-03-12 18:57:43</wp-post_date_gmt>
				</item>
</upm-export>
