{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Traitement d'images\n", "\n", "

Avant de commencer :

\n", "\n", "
    \n", "
  1. uploader/téléverser : \n", "\n", "* le fichier **voirP1P2P3.py** \n", "\n", "* le fichier **image_degrade.png**
  2. \n", "\n", "
  3. exécuter la cellule ci-dessous .
  4. \n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from voirP1P2P3 import * #programme qui permet de voir les images" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous avons déjà rencontré les images pbm, pgm, ppm.\n", "\n", "Nous allons manipuler ces images en les mettant sous forme de listes.\n", "\n", "## Images noir et blanc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "L'image sntNoirEtBlanc.pbm a été créée avec Notepad++ : \n", "\n", "P1
\n", "18 9
\n", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
\n", "0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 1 1 0
\n", "0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
\n", "0 1 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0
\n", "0 1 1 1 1 0 1 0 1 0 1 0 0 0 1 0 0 0
\n", "0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0
\n", "0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0
\n", "0 1 1 1 1 0 1 0 0 0 1 0 0 0 1 0 0 0
\n", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
\n", "\n", "Rappel : 18 car l'image comporte 18 colonnes ; 9 car elle comporte 9 lignes. \n", "\n", "$18 \\times 9 = 162$ donc c'est une image de 162 pixels." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "image = ['P1',18,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]\n", "\n", "largeur = image[1]\n", "hauteur = image[2]\n", "\n", "voir_image(image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Pour passer à la suite, fermer la fenêtre de visualisation.

\n", "\n", "Que valent largeur et hauteur ?\n", "\n", "Faire afficher dans la fenêtre ci-dessous le nombre de pixels :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(...)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La variable image est de type liste. On peut obtenir sa longueur :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "len(image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ce résultat semble-t-il cohérent ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Image en niveaux de gris" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "image_gris = ['P2',15,7,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,0,7,7,7,0,5,0,2,2,2,0,0,0,0,10,0,7,0,7,0,5,0,2,0,2,0,0,10,10,10,0,7,0,7,0,5,0,2,2,2,0,0,10,0,0,0,7,0,7,0,5,0,0,0,2,0,0,10,10,10,0,7,7,7,0,5,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]\n", "voir_image(image_gris)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Image RVB" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "image_rvb = ['P3',4,4,255,255,0,0,0,255,0,0,0,255,100,100,100,255,255,0,255,255,255,0,0,0,50,50,50,255,100,0,255,0,100,0,100,0,0,0,100,100,255,50,150,100,50,30,30,30,20,20,20]\n", "voir_image(image_rvb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercice 1 : inverser le noir et le blanc\n", "\n", "Nous allons modifier l'image noir et blanc.\n", "\n", "Compléter les ... ci-dessous pour que le programme change les pixels noirs en blanc et inversement." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "image = ['P1',18,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]\n", "\n", "i = 3\n", "\n", "while i < len(image):\n", " if image[i] == 0:\n", " image[i] = ...\n", " else:\n", " image[i] = ...\n", " i = ...\n", "\n", "print(image)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "voir_image(image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Images aléatoires\n", "\n", "randint(0,1) fournit un entier aléatoire : 0 ou 1 (comme si on jouait à pile ou face avec une pièce équilibrée)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from random import randint\n", "\n", "largeur = 50\n", "hauteur = 50\n", "taille_liste = largeur*hauteur + 3\n", "\n", "i = 3\n", "image_hasard = ['P1',largeur,hauteur]\n", "\n", "while i < taille_liste :\n", " image_hasard = image_hasard + [randint(0,1)] # à chaque passage dans la boucle, on ajoute un nombre à la liste\n", " i = i+1\n", " \n", "#print(image)\n", "voir_image(image_hasard)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 2\n", "\n", "En s'inspirant du programme ci-dessus, créer une image aléatoire en niveaux de gris.\n", "\n", "Si on choisit 10 niveaux de gris, randint(0,10) donnera un entier aléatoire entre 0 et 10 (0 et 10 compris)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 3\n", "\n", "Créer une image aléatoire RVB :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 4\n", "\n", "Observer l'image :\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ecrire le programme qui affiche cette image (20 pixels) : " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 5\n", "Ecrire un programme qui affiche un damier (plateau de jeu d'échec) de 8 sur 8.\n", "\n", "Prévoir le passage à un damier de 100 sur 100..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 2 }