0% ont trouvé ce document utile (0 vote)
28 vues4 pages

Acquisition d'images avec OpenCV en Python

Ce document décrit comment acquérir des flux vidéo provenant de plusieurs caméras et les afficher simultanément. Le programme ouvre les caméras disponibles, affiche les images dans des fenêtres et calcule le nombre d'images par seconde. Il utilise des threads pour gérer l'acquisition et l'affichage de manière concurrente.

Transféré par

Nikie Sponsor
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
28 vues4 pages

Acquisition d'images avec OpenCV en Python

Ce document décrit comment acquérir des flux vidéo provenant de plusieurs caméras et les afficher simultanément. Le programme ouvre les caméras disponibles, affiche les images dans des fenêtres et calcule le nombre d'images par seconde. Il utilise des threads pour gérer l'acquisition et l'affichage de manière concurrente.

Transféré par

Nikie Sponsor
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

2

Cet extrait provient du livre Traitement d'images et de vidéos avec OpenCV 4 – en Python (Windows, Linux, Raspberry)
Écran de contrôle de caméra vidéo
– Gestion des processus légers
Dans ce chapitre, nous allons écrire un programme permettant d'effectuer l'acquisition
d'images à partir de plusieurs caméras.

écrit par Laurent Berger – © 2020 Éditions D-BookeR


Nous procéderons par étapes : dans un premier exemple, nous présenterons les prin-
cipes de bases de l'acquisition vidéo, puis dans le deuxième, nous verrons la gestion
de la ligne de commande, la gestion d'un fichier de configuration, la gestion de la sou-
ris, la modification de la résolution de l'acquisition vidéo et le calcul sur le flux seront
ajoutés. Enfin, dans le exemple final, l’utilisateur pourra choisir pendant l’exécution du
programme d'appliquer un filtre médian à l’image. L’acquisition de l’image et l'appli-
cation du filtre médian seront gérées par un processus léger (ou thread) et l’affichage
des images par le programme principal. L’affichage pourra se faire dans une fenêtre
pour chaque caméra ou bien dans une fenêtre unique pour toutes les caméras. Dans
ce dernier cas, un clic dans l’image ouvrira une nouvelle fenêtre ne contenant que les
images issues de la caméra sélectionnée. Le zoom pourra aussi être choisi. Ces para-
mètres seront fixés au démarrage du programme en utilisant les arguments de la ligne
de commande.
Attention > Le système d'exploitation peut bloquer l'accès aux caméras. Si le programme ne trouve aucune
des caméras reliées à votre ordinateur, vérifiez les paramètres de sécurité de votre système.

2.1. Acquisition de plusieurs flux vidéo


Exemple 2.1 : Code source (ch2ex1) dans le dossier py_threads

Dans le programme Python suivant, nous effectuons l'acquisition des images issues des
flux vidéo reliés à l'ordinateur. Chaque image est affichée dans une fenêtre. Le pro-
gramme s'arrête lorsque l'utilisateur appuie sur la touche Echap du clavier.

page 6
Traitement d'images et de vidéos avec OpenCV 4 - en Python (Windows, Linux, Raspberry)

Cet extrait provient du livre Traitement d'images et de vidéos avec OpenCV 4 – en Python (Windows, Linux, Raspberry)
Importation du module OpenCV
Pour écrire un programme Python basé sur OpenCV, il faut importer les modules
numpy et cv2 .

import numpy as np
import cv2 as cv

L'alias du module cv2 est cv . Pourquoi cet alias ? Le fait est que toutes les fonctions
de la documentation officielle utilisent l'alias cv.

Les images dans OpenCV sont transcrites en type numpy array (voir en fin d'ouvrage

écrit par Laurent Berger – © 2020 Éditions D-BookeR


l'annexe Memento d'OpenCV).

Afficher le listing suivant dans un navigateur

Le programme importe les librairies numpy , cv2 et time . Le module time est utilisé
pour estimer le temps d'acquisition et d'affichage par seconde d'une image.

Une liste vide est créée pour contenir les flux matériels (les webcams) reliés à votre or-
dinateur . Les flux matériels sont indexés à partir de 0 (entre et ). La boucle
ouvre le périphérique de capture indexé i en créant un objet [Link] . Si le
périphérique est ouvert, la méthode [Link] de la classe [Link]-
deoCapture retournera la valeur vraie.

Classe [Link]
La classe [Link] permet d'accéder aux caméras reliées à l'ordinateur en
utilisant l'interface de programmation (API). Les interfaces connues par OpenCV sont
précisées dans la documentation. Si vous avez téléchargé OpenCV, il vous faut uti-
liser la commande [Link]() pour connaître les détails de votre
version Python d'OpenCV :

print([Link]())

En particulier, les parties GUI (Graphics Unit Interface), Media I/O et Video I/O
vous renseignent sur les API accessibles dans votre version d'OpenCV.

page 7
Traitement d'images et de vidéos avec OpenCV 4 - en Python (Windows, Linux, Raspberry)

Video I/O:

Cet extrait provient du livre Traitement d'images et de vidéos avec OpenCV 4 – en Python (Windows, Linux, Raspberry)
DC1394: NO
FFMPEG: YES (prebuilt binaries)
avcodec: YES (58.35.100)
avformat: YES (58.20.100)
avutil: YES (56.22.100)
swscale: YES (5.3.100)
avresample: YES (4.0.0)
GStreamer: NO
DirectShow: YES
Media Foundation: YES
DXVA: YES

Par exemple, si vous souhaitez ouvrir une caméra accessible à l'aide de l'API V4L/
V4L2, vous devez instancier un objet [Link] avec i+cv.CAP_4L en para-

écrit par Laurent Berger – © 2020 Éditions D-BookeR


mètre : [Link](i+cv.CAP_4L).
Si l'interface vous est indifférente, alors utilisez simplement [Link](i).

Si le périphérique est ouvert, on l'ajoute à la liste liste_webcam (entre et ) sinon on


quitte la boucle en . Si la liste liste_webcam est vide , aucun périphérique n'est pré-
sent ; on écrit un message et on quitte le programme. Entre et , on initialise la variable
code_touche_clavier utilisée pour lire une touche de clavier, la variable nb_prises
pour compter le nombre d'acquisition et la variable tps_ini pour initialiser le chrono-
mètre.

import time
import numpy as np
import cv2 as cv

CODE_TOUCHE_ECHAP = 27
liste_webcam = []
index_camera_ouvertes = 0
while True:
webcam = [Link](index_camera_ouvertes)
if [Link]():
liste_webcam.append(webcam)
else:
break
index_camera_ouvertes += 1
if not liste_webcam:
print("Aucune camera reliee")
exit()

code_touche_clavier = 0

page 8
Traitement d'images et de vidéos avec OpenCV 4 - en Python (Windows, Linux, Raspberry)

nb_prises = 0

Cet extrait provient du livre Traitement d'images et de vidéos avec OpenCV 4 – en Python (Windows, Linux, Raspberry)
tps_ini = [Link]()

while True:
for idx, cam in enumerate(liste_webcam):
ret, img = [Link]()
if ret:
[Link]('webcam b' + str(idx), img)
else:
print(" image ne peut être lue")
nb_prises += 1
if nb_prises == 100:
nb_images_par_seconde = nb_prises / ([Link]() - tps_ini)
print("Pour chaque camera : ", nb_images_par_seconde, " Images

écrit par Laurent Berger – © 2020 Éditions D-BookeR


par seconde")
tps_ini = [Link]()
nb_prises = 0
code_touche_clavier = [Link](20)
if code_touche_clavier == CODE_TOUCHE_ECHAP:
break

for cam in liste_webcam:


[Link]()
[Link]()

La boucle d'acquisition et d'affichage des images est entre et . En , on parcourt la


liste des flux ouverts, puis on appelle la méthode read de classe [Link].
Les valeurs de retour sont un booléen et l'image lue. La valeur du booléen est vraie
lorsque la lecture est valide.
Si la valeur de retour est vraie , une image est alors disponible et on peut l'afficher en
appelant la fonction [Link] avec en premier argument le nom de la fenêtre et en
second l'objet array contenant l'image. En , le nombre d'acquisitions est incrémenté
et si ce nombre est de 100 , on affiche le nombre d'images capturées par seconde
(entre et ). L'appel à [Link] permet de lire le code de la touche clavier pressée
par l'utilisateur et d'afficher les images dans toutes les fenêtres. Le seul paramètre de
cette fonction est le délai minimum en milliseconde pour attendre l'appui d'une touche
sur le clavier. La valeur de retour est −1 si aucune touche n'a été pressée. Si le code de
la touche est égal à 27 (touche Echap du clavier), on quittera la boucle.

Afficher une image


La fonction [Link] affiche une image (un objet array). Il faut bien noter que l'af-
fichage est fait lors de l'appel à la fonction [Link]. La fonction [Link] en-

page 9

Vous aimerez peut-être aussi