CHAPITRE 3 - PHOTOGRAPHIE NUMERIQUE

Comment les images sont-elles paramétrées?

01. LES IMAGES NUMERIQUES

Une image est composée de points appelés Pixel.

La définition d’une image donne donc le nombre de pixels qui composent l’image. Une image de définition 800x600 signifie que cette image est composée de 800 pixels en largeur et 600 en hauteur, soit en tout : 800 x600 = 480 000 pixels.

Il ne faut pas confondre définition d’une image avec résolution qui est la densité de pixels par pouce.

P1 (Portable Bitmap Format)

Ce programme doit se lire en trois temps.

P2 - Les teintes de gris

Le même schéma s'applique ici mais une ligne est rajoutée indiquant que le programme est codé non pas en noir et blanc uniquement mais en différentes teintes de gris (50 ici).

Plus le chiffre se rapproche du 0, plus le pixel sera foncé et inversement.

A droite, l'image est donc représentée

Un pixel est généralement codé sur un octet (8-bits), ce qui donne donc 256 niveaux de couleurs ou teintes mais il est également possible de limiter les nuances à 16, 32, 50 ou 6 nuances de gris par exemple.

P3 - Les couleurs

Première mission: 

Rendez-vous sur le site suivant : https://www.rapidtables.com/web/color/RGB_Color.html et modifiez les valeurs se trouvant uniquement dans la colonne ‘Décimal RGB’. Cela vous aidera à mieux comprendre comment sont codées les couleurs.

Deuxième mission: 

Essayez de créer les couleurs suivantes: rouge, blanc, noir, magenta, gris, gris clair, vert, jaune, marron… selon le concept de synthèse additive.

En ligne 1, P3 signifie que l’image sera en couleur

En ligne 2, ‘3’ représente la largeur et ‘2’ la hauteur (la definition de l’image)

En ligne 3, c’est la valeur maximale pour chaque canal, nous mettons toujours 255 (octet)

Les lignes 4 et 5 correspondent au codage. Un pixel est codé par trois valeurs (RVB ou RGB), c’est pourquoi il y a 9 valeurs de large. (3 x 3 = 9)

L'UTILISATION DE PYTHON

Le but de ce TP est de manipuler un programme python existant pour créer une image. Une image est une succession de pixels dans un espace à deux dimensions (x,y).

Comme vous pouvez le constater sur le schéma, le pixel de coordonnées (0,0) se trouve en haut à gauche de l’image. Si l’image fait 800 pixels de large et 600 pixels de haut, le pixel ayant pour coordonnées (400,300) sera au milieu de l’image.

L’objectif est de créer une image du célèbre plombier, ci-dessous

EXERCICE 1. PIXELS DE COULEUR AVEC BASTHON

Copiez et collez le code ci-dessous dans la console basthon et exécutez le pour repérer les différents rôles de chaque ligne (chaque ligne qui commence par un # est un commentaire, les commentaires ne sont pas lus par python, elles servent d’indications laissées par le créateur du code pour expliquer ce qu’il fait). 

Une fois le code compris, essayez de réaliser l'image ci-après

import matplotlib.pyplot as plt

from PIL import Image


#Creation d'une image blanche RGB 8x8

Mario = Image.new("RGB",(8,8),(255,255,255))


# definition d'une couleur

rouge = (255, 0, 0)


#remplissage de l'image pixel par pixel

Mario.putpixel((0, 2), rouge)

Mario.putpixel((7, 7), (0, 255, 0))


plt.imshow(Mario)

plt.show()

EXERCICE 2. LE DRAPEAU DE LA FRANCE

from PIL import Image #Importe un module de traitement et création d'image 

#nommé Pillow


# Crée un rectangle de 300x200 pixels en blanc

im = Image.new("RGB", (300,200), "RGB(255,255,255)")


# Créer la bande bleue

for x in range(0,100):

    for y in range(0,200):

        im.putpixel((x,y),(0, 0, 0))

im.show()


A quoi peut bien servir la boucle 'for'? Pourquoi en mettre deux d'affilée?

EXERCICE 3. LE DRAPEAU SUISSE

A partir de toutes les lignes de codes travaillées jusque maintenant, réalisez le drapeau de la Suisse.

QUELQUES FONCTIONS PYTHONS EN PLUS

En informatique, on utilise des données qui peuvent être:

Pour pouvoir les utiliser il faut les stocker dans des variables. 

Une variable est donc une sorte de 'boîte' dans laquelle on met un objet (nombre, mot, etc...)

Dans le code ci-dessous, on a créé des variables dans lesquelles on a mis des valeurs.

(Remarque, un # permet d'indiquer un commentaire non lu par le logiciel)

Il est également possible d'afficher le contenu d'une variable avec la fonction: print(nom_de_la_variable)

# nombre1 et nombre2 contiennent des nombres entiers

nombre1 = 5

nombre2 = -7

# nombre3 contient un nombre à virgule

nombre3 = 25.12

# phrase contient une chaîne de caractère

# Les chaînes de caractères se déclarent entre quotes ".." ou '...'

phrase = "Hello World"

#test contient un booléen.

test = True

Exercice 4: 

Q1. Sur la console Basthon, écrivez quelques lignes de codes qui affiche le contenu de la variable 'nombre1' en utilisant la fonction print()

Q2. Même question pour la variable phrase.

L'addition

Il est également possible d'additionner les nombres mais aussi les chaînes de caractères.

Remarque

Si vous essayez d'additionner deux variables de types différents, cela provoque une erreur : TypeError:unsupported operand type(s) for +: 'int' and 'str', ce qui précise qu'il est impossible de le réaliser.

La soustraction

Il n'est possible de soustraire que des nombres. 

La multiplication

Il est possible de multiplier deux nombres

Il est également possible de multiplier une chaîne de caractères par un entier positif

La division

On ne peut diviser que des nombres à l'aide de la fonction / ou // (si nous souhaitons réaliser une division euclidienne)

Exercice 5

A. Déterminez cinq nouvelles variables (a,b,c,d,e) dans basthon correspondant à trois chiffres différents et deux mots.

B. Montrez les résultats des additions des éléments suivants: a + b ; a + c ; d + e

Exercice 6

A. Déterminez 4 variables numériques (f,g,h,i) et réalisez les opérations suivantes: f - g ; f - h ; h - i ; f - i

Exercice 7

A. Déterminez quatre nouvelles variables (j, k, l, m) dans basthon correspondant à trois nombres et un mot et réalisez les opérations suivantes: j * k ; j * l ; m * 3

Exercice 8

A. Déterminez trois nouvelles variables numériques (n, o, p) et réalisez les opérations suivantes: n / o ; o / p ; o // p ; o % p

TP FILTRES PHOTOGRAPHIE (noté)

Ce TP est à réaliser seul. 

Créez un document Powerpoint dans lequel vous réaliserez six filtres photographie sur une image de votre choix à l'aide des compétences  travaillées dans l'exercice Capytale. 

Vous utiliserez le code ci-dessous comme base dans Basthon (vous veillerez à modifier les informations liées à l'image pour y mettre la votre) et pour chaque filtre vous mettrez le résultat (l'image) et le code à côté. 

Ce travail est inspiré des travaux d'Andy Warhol que vous pourrez voir ci-dessous également.

Votre diaporama doit donc contenir sept diapositives. Une diapositive par filtre + une dernière avec le montage à la Warhol. 

Plus votre filtre sera recherché, plus vous pourrez obtenir de points. 

Bonne chance à toutes et tous.

from PIL import Image

img = Image.open("pomme.jpg")

largeur_image=888

hauteur_image=574

for y in range(hauteur_image):

    for x in range(largeur_image):

        r,v,b=img.getpixel((x,y))

        n_r=r

        n_v=v

        n_b=b

        img.putpixel((x,y),(n_r,n_v,n_b))

img.show()