Académique Documents
Professionnel Documents
Culture Documents
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.
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
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
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")
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)
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])
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).
2) Construire une matrice de dimension (5x100) et dessiner une bande de mach plus
étendue avec un pas de 0.01.
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()
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
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()
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()
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