cv2 : installer le bon paquet et éviter les pièges de l’import à la 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.
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.
| Paquet | Fenêtres OpenCV | Usage adapté |
|---|---|---|
| opencv-python | Oui | Scripts locaux avec affichage |
| opencv-contrib-python | Oui | Affichage et modules complémentaires |
| opencv-python-headless | Non | Serveur, Docker, traitement sans fenêtre |
| opencv-contrib-python-headless | Non | Serveur 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.

- Mettez l’outil d’installation à jour : python -m pip install –upgrade pip.
- Installez la variante choisie : python -m pip install opencv-python.
- 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.
- ERP e-commerce : centraliser les ventes ne suffit pas à fiabiliser les stocks - 28 octobre 2026
- cv2 : installer le bon paquet et éviter les pièges de l’import à la webcam - 27 octobre 2026
- Fonctions Python : un résultat réutilisable, pas seulement un affichage - 26 octobre 2026



