Logiciels & applications

cv2 : installer le bon paquet et éviter les pièges de l’import à la webcam

Élise Prévost-Lemercier 8 min de lecture
cv2 : installer opencv-python, vérifier image.shape webcam

Pour utiliser cv2 dans Python, installez généralement le paquet opencv-python, puis écrivez import cv2 dans votre script. Ce décalage entre nom du paquet et nom du module explique beaucoup d’erreurs au démarrage. Une fois l’installation vérifiée, vous pouvez lire une image, la transformer, l’enregistrer ou traiter les images d’une webcam.

Choisir un seul paquet OpenCV pour son environnement

OpenCV est une bibliothèque open source de vision par ordinateur. Le module cv2 donne accès à ses fonctions depuis Python : traitement des pixels, détection de contours, analyse vidéo ou annotation d’images. Les paquets distribués sur PyPI fournissent des binaires précompilés lorsque votre plateforme est compatible, ce qui évite une compilation locale.

Testez vos connaissances sur cv2

Répondez aux six questions, puis validez pour obtenir une correction immédiate.

Progression : 0/6 Score : 0/6
1. Quel paquet installe-t-on généralement pour utiliser le module Python cv2 ?

Bonne réponse : opencv-python. Le paquet s’installe avec ce nom, tandis que le module importé en Python s’appelle cv2.
2. Quelle variante est conçue pour un environnement sans fonctionnalités d’interface graphique ?

Bonne réponse : opencv-python-headless. La variante « headless » convient notamment aux serveurs et autres environnements sans interface graphique.
3. Quelle instruction permet de vérifier l’interpréteur Python actuellement utilisé ?

Bonne réponse : import sys; print(sys.executable). sys.executable affiche le chemin de l’exécutable Python utilisé.
4. Dans un tableau d’image image.shape, quel est l’ordre des deux premières dimensions ?

Bonne réponse : hauteur puis largeur. Pour une image couleur, shape suit généralement l’ordre (hauteur, largeur, canaux).
5. Quelle convention de couleur est utilisée par défaut par cv2 pour les images couleur ?

Bonne réponse : BGR. L’ordre des canaux par défaut est bleu, vert, rouge, contrairement à l’ordre RGB souvent utilisé ailleurs.
6. Quelle instruction libère correctement une webcam ouverte avec cv2.VideoCapture ?

Bonne réponse : cap.release(). Cette méthode libère la ressource associée à l’objet de capture.

Il existe quatre variantes principales. Elles partagent toutes le même espace de noms cv2 : il faut donc en installer une seule par environnement. La variante contrib inclut les fonctions standard et des modules complémentaires ; elle ne s’ajoute pas au paquet standard.

PaquetFenêtres OpenCVUsage adapté
opencv-pythonOuiScripts locaux avec affichage
opencv-contrib-pythonOuiAffichage et modules complémentaires
opencv-python-headlessNonServeur, Docker, traitement sans fenêtre
opencv-contrib-python-headlessNonServeur avec modules complémentaires

Sur un serveur, la variante headless évite les dépendances d’interface graphique inutiles. Elle sait toujours lire, modifier et enregistrer des images, mais ne permet pas d’utiliser les fenêtres de cv2.imshow. Un notebook qui affiche les images avec un autre outil n’a pas nécessairement besoin de ces fenêtres non plus.

Installer cv2 et vérifier le Python réellement utilisé

Créez de préférence un environnement virtuel avec python -m venv .venv, puis activez-le : source .venv/bin/activate sous Linux ou macOS, ou .venv\Scripts\Activate.ps1 dans PowerShell sous Windows. Les commandes suivantes s’exécutent dans le terminal, pas dans l’interpréteur Python.

Schéma pédagogique cv2 dans Python, de l’installation au traitement et à la sauvegarde d’une image
Schéma pédagogique cv2 dans Python, de l’installation au traitement et à la sauvegarde d’une image
  1. Mettez l’outil d’installation à jour : python -m pip install –upgrade pip.
  2. Installez la variante choisie : python -m pip install opencv-python.
  3. Vérifiez l’import : python -c « import cv2; print(cv2.__version__) ».

La forme python -m pip relie explicitement pip à l’interpréteur sélectionné. C’est plus fiable qu’une commande pip isolée lorsque plusieurs versions de Python cohabitent. Dans un environnement conda, conda install opencv constitue une autre possibilité ; évitez de multiplier les installations concurrentes avec différents gestionnaires.

Pensez à votre environnement comme à une voûte : l’interpréteur, les paquets et les bibliothèques natives doivent s’appuyer les uns sur les autres sans décalage. Installer OpenCV dans un terminal ne suffit pas si votre éditeur utilise un autre Python. Comparez python -c « import sys; print(sys.executable) » avec l’interpréteur sélectionné dans l’éditeur ou le noyau du notebook avant de réinstaller quoi que ce soit.

Passer d’un fichier image à un résultat enregistré

Lire l’image et contrôler ses dimensions

Dans votre script, commencez par import cv2, puis chargez un fichier avec image = cv2.imread(« photo.jpg »). Le chemin relatif est interprété depuis le répertoire de travail du programme, qui n’est pas forcément celui du script. Pour un premier test, un chemin absolu peut lever cette ambiguïté.

Vérifiez toujours si image is None avant toute transformation. Un fichier absent, illisible ou non décodable peut produire cette valeur plutôt qu’une exception explicite. Une erreur ultérieure dans resize ou cvtColor n’indique alors pas un défaut de ces fonctions : la lecture a déjà échoué.

L’image obtenue est un tableau NumPy. Une image couleur possède 3 dimensions, généralement hauteur, largeur et canaux ; une image en niveaux de gris en possède 2. Pour consulter ces propriétés, utilisez print(image.shape, image.dtype). La lecture couleur par défaut produit généralement trois canaux BGR, avec 8 bits par composante.

Afficher sans fermer immédiatement la fenêtre

Sur un poste disposant d’une interface graphique et du paquet approprié, exécutez successivement cv2.imshow(« Image », image), cv2.waitKey(0), puis cv2.destroyAllWindows(). L’attente avec la valeur 0 est indéfinie jusqu’à une touche ; elle permet aussi à la fenêtre de rester active. Sans gestion des événements, l’affichage peut disparaître immédiatement ou sembler bloqué.

Attention aux couleurs : OpenCV utilise BGR, tandis que Matplotlib attend généralement du RGB. Avant un affichage avec cet outil, convertissez avec rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB). Pour produire directement une image monochrome, utilisez cv2.imread(« photo.jpg », cv2.IMREAD_GRAYSCALE).

Redimensionner, annoter et sauvegarder

cv2.resize(image, (960, 540)) crée une image de 960 × 540 pixels, mais déforme le sujet si les proportions initiales diffèrent. Pour conserver le cadrage, calculez la hauteur proportionnelle à la largeur souhaitée. Notez l’inversion pratique : shape donne hauteur puis largeur, tandis que resize attend largeur puis hauteur.

Pour annoter, cv2.rectangle(image, (300, 150), (500, 400), (0, 255, 0), 2) dessine un rectangle vert, si ces coordonnées conviennent à l’image. cv2.putText(image, « Test », (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) ajoute du texte rouge. Ces fonctions modifient l’image : travaillez sur image.copy() pour préserver l’original.

Enregistrez ensuite avec succes = cv2.imwrite(« resultat.png », image) et contrôlez ce booléen. Le dossier de destination doit exister. L’extension sélectionne le format ; PNG convient notamment pour conserver des annotations sans compression avec pertes.

Lire une webcam sans laisser la caméra occupée

camera = cv2.VideoCapture(0) ouvre généralement la caméra par défaut. Vérifiez camera.isOpened() avant de poursuivre. L’index 0 n’est pas universel : avec plusieurs périphériques, il peut être nécessaire d’en tester un autre et de contrôler les autorisations du système.

Le traitement repose sur une boucle : ok, frame = camera.read() récupère une image. Si ok est faux, interrompez la boucle plutôt que de transmettre une image invalide aux fonctions suivantes. Vous pouvez ensuite appliquer à frame les mêmes transformations qu’à une photographie.

Pour un aperçu local, affichez chaque image avec cv2.imshow(« Webcam », frame). Testez ensuite cv2.waitKey(1) & 0xFF == 27 pour quitter avec Échap, dont le code est 27. Placez la boucle dans un bloc try et la libération dans finally : camera.release(), puis cv2.destroyAllWindows(). La caméra sera ainsi libérée même en cas d’erreur.

Sur un serveur headless, supprimez imshow et waitKey. Prévoyez une autre condition d’arrêt, par exemple un nombre d’images à traiter, puis enregistrez les résultats nécessaires.

Diagnostiquer les erreurs sans réinstaller au hasard

  • ModuleNotFoundError: No module named ‘cv2’ : vérifiez l’interpréteur et lancez python -m pip show opencv-python, ou le nom de votre variante.
  • Échec de pip ou erreur liée à skbuild : mettez pip à jour, puis vérifiez la compatibilité entre Python, votre système et les wheels proposées. Une compilation inattendue peut signaler l’absence de binaire compatible.
  • DLL load failed sous Windows : contrôlez l’architecture Python et les dépendances système, notamment Visual C++ Redistributable. Certaines éditions Windows nécessitent aussi des composants multimédias adaptés.
  • imshow indisponible : recherchez une variante headless ou une session sans affichage graphique. Installer un paquet graphique ne crée pas à lui seul un écran sur un serveur.

Si plusieurs variantes sont présentes, désinstallez-les avec python -m pip uninstall opencv-python opencv-contrib-python opencv-python-headless opencv-contrib-python-headless, puis réinstallez uniquement celle retenue. Contrôlez aussi qu’aucun fichier local nommé cv2.py ne masque le module. Enfin, print(cv2.__file__) permet de repérer une ancienne installation importée à votre insu.

Élise Prévost-Lemercier

Partager cet article

Retour en haut