Licence CC BY-NC-ND, Valérie Roy & Thierry Parmentelat
TP images (1/2)¶
merci à Wikipedia et à stackoverflow
import des librairies¶
Importez la librairie
numpyImportez la librairie
matplotlib.pyplot
ou toute autre librairie d’affichage que vous aimez et/ou savez utiliser:seaborn...
# votre codeoptionnel - 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 codeTransformez le en tableau blanc (en un seul slicing) et affichez-le
# votre codeTransformez le en tableau vert (en un seul slicing) et affichez-le
# votre codeAffichez les valeurs RGB du premier pixel de l’image, et du dernier
# votre codeFaites un quadrillage d’une ligne bleue, toutes les 10 lignes et colonnes et affichez-le
# votre codelecture d’une image en couleur¶
Avec la fonction
plt.imreadlisez le fichierdata/les-mines.jpg
# votre codeVérifiez si l’objet est modifiable avec
im.flags.writeable; si il ne l’est pas, copiez l’image
# votre codeAffichez l’image
# votre codeQuel est le type de l’objet créé ?
# votre codeQuelle est la dimension de l’image ?
Quelle est la taille de l’image en hauteur et largeur ?
# votre codeQuel 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 codeQuelles sont ses valeurs maximale et minimale des pixels ?
# votre codeAffichez le rectangle de 10 x 10 pixels en haut de l’image
# votre codeaccès à des parties d’image¶
Relire l’image
# votre codeSlicer 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 codeIsoler le rectangle de
llignes etccolonnes en milieu d’image
affichez-le pour(l, c) = (10, 20)) puis(l, c) = (100, 200)
# votre codecanaux RGB de l’image¶
Relire l’image
# votre codeDécoupez l’image en ses trois canaux Red, Green et Blue (Il s’agit donc de construire trois tableaux de dimension 2)
# votre codeAfficher 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 codeCorrigez vos affichages si besoin
# votre codeCopiez 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
# votre codeenfin pour vérifier, affichez les 20 dernières lignes et colonnes du carré à rayures
# votre codetransparence des images¶
Relire l’image initiale (sans la copier)
# votre codeCré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 codeCopiez-y l’image initiale, mettez le quatrième canal à
128et affichez l’image
# votre codeimage en niveaux de gris en float¶
Relire l’image
data/les-mines.jpg
# votre codePassez ses valeurs en flottants entre 0 et 1 et affichez-la
# votre codeTransformer 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 formuleG = 0.299 * R + 0.587 * V + 0.114 * Bc. optionnel: si vous pensez à plusieurs façons de faire la question a., utilisez%%timeitpour les benchmarker et choisir la plus rapide
# votre codePrenez 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 codePareil, mais cette fois utilisez la racine carrée; quel effet cette fois ?
# votre codeConvertissez l’image (de 3.a toujours) en type entier, et affichez la
# votre codeaffichage 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 codeAffichez-les en damier:
A B C C A B B C A
# votre code