Vous êtes sur la page 1sur 10

Activité 1 :

Maniement matricielle et affichage d’image/ vidéo

1. INTRODUCTION
Une image numérique peut être représentée par une matrice composée d’un nombre
d’éléments appelés Pixels abréviation de Picture Elément.
L'objectif de cette introduction sous Python est de présenter la notion d'image/vidéo et
d'effectuer des opérations simples d'analyse d'images grâce à des librairies Python.
Python est un langage de programmation complet qui peut être utilisé pour réaliser des
programmes scientifique, mais aussi des jeux vidéo, des sites web, des logiciels
professionnels... Il offre donc bien plus de possibilités qu’un langage comme MATLAB,
restreint au calcul mathématique. Python recherche avant tout la simplicité et la lisibilité, en
particulier il est très proche du langage humain et très facile à apprendre. Nous utiliserons donc
l’environnement Spyder pour programmer en Python. Lancer Spyder à partir du menu
Démarrer.
L’environnement Spyder se décompose en plusieurs fenêtres.

Figure1 : Aperçu de l’interface Spyder


Nous avons sur la gauche, un éditeur de fichier. Cette partie vous permet d'écrire des
scripts entiers puis de les lancer. C'est donc ici que tout le contenu d'un programme python

1
s'ouvrira. Sur la droite de la fenêtre, on retrouve en haut une sous-fenêtre contenant trois
onglets : Aides, Explorateur de variables et Explorateur de fichiers. Finalement, dans la
troisième fenêtre, celle se présentant en bas à droite, vous avez accès à deux onglets : Historique
et Console IPython. Vous pouvez vous amuser à faire le test de la puissance ultime en tapant
"1+1" puis taper sur entrer pour voir que vos commandes soient bien interprétées. L'onglet
Historique vous récapitule toutes les commandes taper dans la console IPython.
Pour écrire un nouveau programme, il suffit de cliquer sur fichier puis nouveau fichier. Le
premier réflexe est de sauvegarder votre programme avec un nom cohérent (sans espace, sans
tiret et sans caractère spécial). Une fois votre programme écrit, n’oubliez pas de le sauvegarder
avant de l’exécuter. Pour cela, il suffit de cliquer sur la touche raccourcie clavier F5.
2. TYPE ET OPERATIONS DE BASE DE PYTHON
Taper les lignes suivantes puis l’exécuter. Noter les resultats.
2.1) La fonction print
La fonction print permet d’afficher un élément dans la console, elle est très pratique
pour afficher le déroulé d’un code au fur et à mesure. print prend autant d’argument qu’on veut
et les affiche les un à la suite des autres.
print(1, "a", 2, sep=",")
print(2*2, 3.14, end="!!")

2.2) Les variables


Une variable est une représentation idéale d’une zone de mémoire de l’ordinateur. Il
s’agit d’un endroit où l’on peut stocker une valeur, y accéder et changer cette valeur.
Une variable se caractérise par
- un nom qui permet de l’identifier,
- une valeur,
- son type (entier, flottant, chaîne de caractères, liste ou booléen).
L’affectation est l’instruction qui permet d’assigner une valeur à une variable. Si cette dernière
n’existe pas encore, on parle de déclaration de la variable. Elle correspond au codage
nom_de_variable ←valeur.
En python, cela se fait à l’aide de la syntaxe suivante :
nom_de_variable=valeur.
Voici les différents types de variables qu’il est impératif de connaître :
Type de variable Syntaxe en Python Description
Entiers relatifs int Entiers de -214748364 à 214748364

2
Nombres à float Nombres décimaux
virgule
Listes list Tableaux formés de lettres et nombres
Chaînes de str Tableaux formés uniquement de lettre
caractères
Booléens bool Peut prendre deux valeurs True ou False
Lorsque l’on définit une variable, il faut donc avoir en tête le type de variable que nous avons
définie. En cas de doute, vous pouvez utiliser la fonction type (variable) où vous remplacer
variable par votre variable.
Il peut être également utile de savoir comment convertir un type de variable en un autre type de
variable. Le tableau récapitulatif à connaître est le suivant :
A utiliser Pour transformer
int (x) Le type float en type int
Exemple: int(2.5) retourne 2
float (x) Le type int en type float
Exemple: float(2) retourne 2.0
str (x) Le type int, float ou list en type str
Exemples:
- str(3). retourne ’3’
- str(3.0) retourne ’3.0’
- str([1,2,3]) retourne ’[1,2,3]’
sist (x) Le type str en type list
Exemple: list("test’’) retourne [’t’,’e’,’s’,’t’]
[x] Le type float ou int en type list
Exemples:
- [3]
- [3.0]

Enfin, il peut être important de connaître les opérations élémentaires que nous pouvons
effectuer sur les variables. En voici une liste :
Opérateur Utilité
+ Addition
- Soustraction
* Multiplication
/ Division
% Modulo (reste de la division)
// Quotient (de la division)
** Puissance
+= Rajouter à la variable
-= Enlever à la variable
*= Multiplier à la variable
/= Diviser à la variable

2.3) Les boucles

3
En programmation, on est souvent amené à répéter plusieurs fois une instruction.
Incontournables à tout langage de programmation, les boucles vont nous aider à réaliser cette
tâche de manière compacte.
La syntaxe de la boucle for est for x in E:, ne pas oublier les " :". Cette syntaxe est très
générale et permissive : on peut itérer sur tout contenu itérable, comme par exemple une liste
ou une chaîne de caractères. Pour une boucle sur des entiers, on utilise range pour construire
l’ensemble des nombres voulus et itérer dessus. La convention Python est l’intervalle ouvert :
range(m,n) contient les nombres de m à n − 1.
for i in range(10):
print(i)

Les autres instructions ont une syntaxe semblable, toujours avec un " :". La syntaxe d’une
boucle conditionnelle est if boolean:, les opérateurs >, <, >=, <=, ==, != ont le résultat attendu.
for i in range(10):
j += 1
if i + j == 3:
print("{} + {} = 2".format(i,j))
elif i + j == 6:
print("{} + {} = 3".format(i,j))
else:
print(i, j, "ni 2 ni 3")

2.4) Création de matrices


Pour définir une matrice, on utilise la fonction array du module Numpy. Numpy
fournit des classes de matrices et tableau qui sont des standard et qui permette de dialoguer
facilement entre les différentes libraires. Numpy fournit aussi un certain nombre d'opérations
mathématiques utilisant ces tableaux.
import numpy as np
A = np.array([[1, 2, 3], [4, 5, 6], [7,8,9], [11,12,13]])
print ("la taille de A= ", A.shape)

L’attribut shape donne la dimension d’une matrice : nombre de lignes, nombre de colonnes.
On peut redimensionner une matrice, sans modifier ses termes, à l’aide de la méthode reshape.
B = A.reshape((3, 4))
print ("la dimension de B= ", B.shape)

L’accès à un terme de la matrice A se fait à l’aide de l’opération d’indexage A[i, j] où i désigne


la ligne et j la colonne. Attention, les indices commencent à zéro ! À l’aide d’intervalles, on
peut également récupérer une partie d’une matrice : ligne, colonne, sous-matrice.

4
A[1, 0]
A[0, :]
A[0, :].shape
A[0 :1, :]
A[0 :1, :].shape
A[ :, 1]
A[ :, 1 :2]
A[1 :3, 0 :2]

Les fonctions zeros et ones permettent de créer des matrices remplies de 0 ou de 1. La fonction
eyes permet de créer une matrice du type 𝐈𝐧 où 𝑛 est un entier. La fonction diag permet de créer
une matrice diagonale.
np.zeros((2,3))
np.ones((3,2))
np.eye(4)
np.diag([1,2,3])

Enfin la fonction concatenate permet de créer des matrices par blocs.


A = np.ones((2,3))
B = np.zeros((2,3))
np.concatenate((A,B), axis=0)
np.concatenate((A,B),axis=1)

2.5) Calcul matriciel


Les opérations d’ajout et de multiplication par un scalaire se font avec les opérateurs +
et *.
import numpy as np
A = np.array([[1,2], [3,4]])
B = np.eye(2)
print (A + 3*B)

Pour effectuer un produit matriciel (lorsque que cela est possible), il faut employer la fonction
dot.
A = np.array([[1,2], [3,4]])
B = np.array([[1,1,1], [2,2,2]])
print (np.dot(A, B))
On peut également utiliser la méthode dot qui est plus pratique pour calculer un produit de
plusieurs matrices.
A.dot(B)
A.dot(B).dot(np.ones((3,2)))

5
3. FORMATS D’IMAGES
3.1) Image en niveaux de gris
Une image d’intensité est une matrice composée par des réels compris entre 0 (Noir) et
1 (Blanc). La variation de 0 à 1 représente donc les différents niveaux de gris du foncé vers le
plus clair.
1) A partir de l'image fournie, Composer un programme qui affiche la lettre A dans une
matrice de dimension (8x8).

Matplotlib permet d'afficher une image (si c'est un tableau numpy).


import matplotlib.pyplot as plt
plt.imshow(img, cmap=plt.gray())# pour image en niveaux de gris
plt.show()

2) Construire une matrice de dimension (5x100) et dessiner une bande de mach plus
étendue avec un pas de 0.01.

3.2) Image en couleur


La perception humaine se base sur deux éléments essentiels : les Cônes et les Bâtonnets.
Les cônes permettent la perception couleur en réagissant aux basses, moyennes et hautes
fréquences (Rouge, Vert et bleu). Afin de synthétiser ses couleurs informatiquement il suffit de
superposer ces trois couleurs de bases en des proportions variables (comme le fait les cônes).
Exécuter le programme suivant et commenter.
import numpy as np

img = np.zeros((3,3,3))
R = np.array( [[0.5, 0, 1],
[0, 1, 0],
[1, 0, 0.5]])

6
G = np.array( [[0.5, 0.6, 1],
[0.6, 0, 0],
[0, 0.6, 0.5]])
B = np.array( [[0.5, 1, 0],
[1, 0, 1],
[0, 1, 0.5]])
img[:,:,0]=R
img[:,:,1]=G
img[:,:,2]=B
plt.imshow(img, interpolation='nearest')
plt.axis('off')
plt.show()

1) Quelle est le résultat obtenu ?


2) A quoi correspondent les valeurs dans les trois matrices RGB
3) Expliquer la superposition des éléments des trois matrices pour obtenir les couleurs
suivantes.

APPLICATIONS
1) Charger l’image ‘lina.png’ en couleur et la visualiser.

PIL permet de lire une image enregistrée localement dans de nombreux formats.
from PIL import Image
import numpy as np
img = Image.open("Nom image.extension")
img = np.array(img) # Transformation de l'image en tableau numpy

2) Afficher les dimensions de l'image; Qu’est qu’elle indique la valeur 3 sur la troisième
dimension ?
3) Afficher img(50,70,0) puis img(50,70,1) et enfin img(50,70,2). Que représentent ces
valeurs ?
4) Charger l’image ‘brba.jpg’ et modifier cette image en remplaçant le fond jaune par un fond
vert.

7
Matplotlib permet d'afficher une image (si c'est un tableau numpy).
import matplotlib.pyplot as plt
plt.imshow(img, interpolation='nearest') # pour image en couleur

Enregistrer les images obtenues en utilisant le code suivant :


from PIL import Image
img = Image.fromarray(img) # Transformation du tableau en image PIL
img.save("resultat.jpg")

4. FORMATS DE VIDEOS
Pour démarrer la caméra, nous allons utiliser cette commande d’OpenCV :
cv2.VideoCapture(0)

Le « 0 » signifie que l’on prend le premier périphérique caméra (webcam) que l’on trouve (celui
par défaut). Si vous souhaitez utiliser une vidéo déjà enregistrée sur votre ordinateur, il suffit
de remplacer le 0 par le chemin de votre fichier.
Exécuter les programmes suivants :
- Ouvrir le flux d'une Webcam
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow("frame", frame)
key = cv2.waitKey(1)
if key == 27:
break

cap.release()
cv2.destroyAllWindows()

Composer un programme qui convertir le flux d’une Webcam en niveaux de gris.

8
- Ouvrir vidéo déjà enregistrée sur votre ordinateur
Télécharger vidéo red_panda_snow.mp4.
import cv2
cap = cv2.VideoCapture("red_panda_snow.mp4 ")
while True:
ret, frame = cap.read()
cv2.imshow("frame", frame)

key = cv2.waitKey(25)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()

Composer un programme qui :

1) Affiche la dimension de vidéo.


2) Affiche l’image de vidéo a frame=50, frame= 60, frame= 100. Enregistrer les images
obtenues.
- Enregistrer vidéo sur votre ordinateur

import cv2
cap = cv2.VideoCapture("red_panda_snow.mp4 ")
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("flipped_video.avi", fourcc, 25, (640, 360))
while True:
ret, frame = cap.read()
frame2 = cv2.flip(frame, 1)

cv2.imshow("frame2", frame2)
cv2.imshow("frame", frame)
out.write(frame2)

9
key = cv2.waitKey(25)
if key == 27:
break
out.release()
cap.release()
cv2.destroyAllWindows()

10