Licence CC BY-NC-ND, Valérie Roy & Thierry Parmentelat
pour réaliser ce TP localement sur votre ordi, commencez par télécharger le zip
TP images (1/2)¶
merci à Wikipedia et à stackoverflow
import des librairies¶
Importez la librairie
numpy
Importez la librairie
matplotlib.pyplot
ou toute autre librairie d’affichage que vous aimez et/ou savez utiliser:seaborn
...
# votre code
optionnel - changez la taille par défaut des figures matplotlib par exemple choisissez d’afficher les figures dans un carré de 4x4 (en théorie ce sont des inches)
création d’une image de couleur¶
Exercice
- Créez un tableau non initialisé, pour représenter une image carrée de 91 pixels de côté, d’entiers 8 bits non-signés, et affichez-le
# votre code
- Transformez le en tableau blanc (en un seul slicing) et affichez-le
# votre code
- Transformez le en tableau vert (en un seul slicing) et affichez-le
# votre code
- Affichez les valeurs RGB du premier pixel de l’image, et du dernier
# votre code
- Faites un quadrillage d’une ligne bleue, toutes les 10 lignes et colonnes et affichez-le
# votre code
lecture d’une image en couleur¶
- Avec la fonction
plt.imread
lisez le fichierdata/les-mines.jpg
# votre code
- Vérifiez si l’objet est modifiable avec
im.flags.writeable
; si il ne l’est pas, copiez l’image
# votre code
- Affichez l’image
# votre code
- Quel est le type de l’objet créé ?
# votre code
- Quelle est la dimension de l’image ?
- Quelle est la taille de l’image en hauteur et largeur ?
# votre code
- Quel est le nombre d’octets utilisé par pixel ?
- Quel est le type des pixels ?
(deux types pour les pixels: entiers non-signés 8 bits ou flottants sur 64 bits)
# votre code
- Quelles sont ses valeurs maximale et minimale des pixels ?
# votre code
- Affichez le rectangle de 10 x 10 pixels en haut de l’image
# votre code
accès à des parties d’image¶
- Relire l’image
# votre code
- Slicer et afficher l’image en ne gardant qu’une ligne et qu’une colonne sur 2, 5, 10 et 20
(ne dupliquez pas le code)
# votre code
- Isoler le rectangle de
l
lignes etc
colonnes en milieu d’image
affichez-le pour(l, c) = (10, 20)
) puis(l, c) = (100, 200)
# votre code
canaux RGB de l’image¶
- Relire l’image
# votre code
- Découpez l’image en ses trois canaux Red, Green et Blue (Il s’agit donc de construire trois tableaux de dimension 2)
# votre code
Afficher chaque canal avec
plt.imshow
; la couleur est-elle la couleur attendue ?
Si oui très bien, si non que se passe-t-il ?
# votre code
- Corrigez vos affichages si besoin
# votre code
- Copiez l’image, et dans la copie, remplacer le carré de taille
(200, 200)
en bas à droite:- d’abord par un carré de couleur RGB
(219, 112, 147)
(vous obtenez quelle couleur) - puis par un carré blanc avec des rayures horizontales rouges de 1 pixel d’épaisseur
- d’abord par un carré de couleur RGB
# votre code
- enfin pour vérifier, affichez les 20 dernières lignes et colonnes du carré à rayures
# votre code
transparence des images¶
- Relire l’image initiale (sans la copier)
# votre code
- Créez un tableau vide de la même hauteur et largeur que l’image, du type de l’image initiale, mais avec un quatrième canal
# votre code
- Copiez-y l’image initiale, mettez le quatrième canal à
128
et affichez l’image
# votre code
image en niveaux de gris en float
¶
- Relire l’image
data/les-mines.jpg
# votre code
- Passez ses valeurs en flottants entre 0 et 1 et affichez-la
# votre code
- Transformer l’image en deux images en niveaux de gris :
a. en mettant pour chaque pixel la moyenne de ses valeurs R, G, B
b. en utilisant la correctionY
(qui corrige le constrate) basée sur la formuleY = 0.299 * R + 0.587 * G + 0.114 * B
c. optionnel: si vous pensez à plusieurs façons de faire la question a., utilisez%%timeit
pour les benchmarker et choisir la plus rapide
# votre code
- Prenez l’image de 3.a (moyenne des 3 canaux), passez les pixels au carré, et affichez le résultat Quel est l’effet sur l’image ?
# votre code
- Pareil, mais cette fois utilisez la racine carrée; quel effet cette fois ?
# votre code
- Convertissez l’image (de 3.a toujours) en type entier, et affichez la
# votre code
affichage grille de figures¶
# ce qui nous donne, mis bout à bout
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 2*np.pi, 50)
Y = np.sin(X)
# le code
fig, axes = plt.subplots(2, 3)
print(f"{type(axes)=}")
print(f"{axes.shape=}")
axes[0, 0].plot(X, Y, 'b')
# axes[0, 1].plot(X, Y, 'r')
axes[0, 2].plot(X, Y, 'y')
axes[1, 0].plot(X, Y, 'k')
axes[1, 1].plot(X, Y, 'g')
axes[1, 2].plot(X, Y, 'm')
fig.suptitle("sinus en couleur", fontsize=20)
axes[0, 0].set_title('sinus bleu')
axes[0, 2].set_xlabel('de 0 à 2 pi')
axes[1, 1].set_ylabel('de -1 à 1')
axes[1, 2].set_title('sinus magenta')
plt.tight_layout();
type(axes)=<class 'numpy.ndarray'>
axes.shape=(2, 3)

reprenons le TP¶
exercice
Reprenez les trois images en niveau de gris que vous aviez produites ci-dessus:
A: celle obtenue avec la moyenne des rgb
B: celle obtenue avec la correction Y
C: celle obtenue avec la racine carrée
- Affichez les trois images côte à côte
A B C
# votre code
- Affichez-les en damier:
A B C C A B B C A
# votre code