Categories: BaseOpenCVTutoriel

Comment charger, afficher et enregistrer une image

Une des premières questions que l’on peut se poser lorsque l’on débute avec OpenCV est comment fait-on pour charger une image.

La question qui vient par la suite est comment l’afficher.

Même si afficher une image n’est pas forcément utile, il peut s’avérer un moyen simple de trouver ce qui ne va pas dans votre programme. Il est donc intéressant d’y accorder le sujet d’un article 🙂

Et comme nous sommes si bien partis, autant continuer et apprendre à enregistrer une image.

Comment charger, afficher et enregistrer une image:

L’objectif de cet article est d’apprendre à charger une image, l’afficher et attendre qu’une touche soit pressée avant de fermer l’affichage et terminer le scripte.

Nous allons donc utiliser principalement trois fonctions:

  • cv2.imread(path) : permettant de charger une image ayant pour chemin: path.
  • cv2.imshow(‘Nom’, img): permettant d’afficher l’image (img) dans la fenêtre ‘Nom’
  • cv2.imwrite(path, img): permettant d’enregistrer l’image (img) dans un répertoire dédié

Passons au code:

import cv2
import argparse

arg = argparse.ArgumentParser() 
arg.add_argument("-i", "--img", dest="imgfile", default=False, help ="le fichier image à lire")
arg.add_argument("-d", "--dest", dest="imgdest", help ="le fichier image à sauvegarder")
args = arg.parse_args()

imgfile = args.imgfile
imgdest = args.imgdest
img=cv2.imread(imgfile)
if (imgdest): 
    cv2.imwrite(imgdest,img) 
cv2.imshow('image',img) 
cv2.waitKey(0)

Les lignes 1 et 2 permettent d’importer les paquets que nous allons utiliser: cv2 pour la partie OpenCV et argparse qui permet d’analyser les arguments en entrée de notre programme.

Les lignes 4 à 9 vont nous permettre de récupérer les arguments de notre programme, à savoir imgfile notre fichier image d’origine et  imgdest le fichier image à sauvegarder.

Le chargement de l’image se fait à la ligne 11.  cv2.imread prend en entrée le chemin de notre image et stock cette image dans la variable img qui est de type numpy.ndarray .

Du fait que nous ne modifions pas l’image, vous n’avez pas forcément envie d’en enregistrer une nouvelle version. C’est pourquoi la ligne 12 nous permet de ne pas enregistrer l’image si on ne fournit de chemin de destination.

Dans le cas où vous souhaitez enregistrer l’image, la ligne 13 va vous intéresser: cv2.imwrite prend en entrée le chemin de destination: imgdest, et l’image que l’on veut enregistrer: img.

Passons maintenant à l’affichage:

La ligne 16 nous permet d’afficher l’image: le premier argument est le nom de la fenêtre où sera afficher l’image. Le second est l’image que nous voulons afficher dans cette fenêtre. La ligne suivante est particulièrement importante. En effet, sans cette ligne, votre programme va afficher votre image et la refermer immédiatement . Pas très pratique…

Cv2.waitKey permet de mettre en pause notre programme, jusqu’à ce que l’on presse une touche. Le seul argument que cv2.waitKey prend est un entier positif correspondant au délais en millisecondes avant que la fenêtre ne se ferme automatiquement. Si l’on spécifie « 0 », la fonction attendra infiniment qu’une touche soit pressée.

Nous pouvons maintenant lancer notre programme avec la commande suivante: python3 image.py -i charger_image.jpg -d image_enregistre.jpg

Voilà vous avez affiché votre image et en avez enregistré une copie !

Et ensuite ?

Je vous invite à découvrir les fonctions de bases pour la manipulation des vidéos (ici)

Florent

View Comments

Recent Posts

Conduite autonome : comment détecter les lignes d’une route

Détecter les voies de circulation est une étape incontournable pour la réalisation d’un système de…

2 jours ago

Capturer une image avec la caméra du Raspberry

Dans cet article, nous allons voir comment capturer simplement une image grâce au module raspicam…

4 mois ago

Détecter les repères faciaux (facial landmarks) avec Dlib

Aujourd’hui nous allons utiliser Dlib et OpenCV pour détecter les repères faciaux (facial landmarks) dans…

2 ans ago

Reconnaissance d’objets en temps réel avec MobileNet

Nous avons vu dans un précédent article comment utiliser l’algorithme MobileNetSSD pour la reconnaissance d’objet…

2 ans ago

Reconnaissance d’objet avec MobileNet et OpenCV

Dans cet article, nous nous intéressons à l’utilisation des réseaux de neurones convolutifs dans le…

2 ans ago

Où est Charlie ?

Derrière ce titre un peu trompeur, nous n’allons pas trouver Charlie dans une image, mais…

2 ans ago