<< | Liste des exercices | Transformations ponctuelles d'une image >>

1. Lecture et affichage d'une image

Le but de ces exercices est d'utiliser quelques-unes des fonctions et structures les plus élémentaires de la bibliothèque OpenCV.

Lecture d'une image et affichage de ses propriétés

Le code python suivant utilise OpenCV pour :

  • ouvrir l'image nomImage et l'afficher dans une fenêtre ;
  • afficher des propriétés de cette image ;
  • lorsque l'utilisateur appuie sur une touche, fermer la fenêtre et libérer la mémoire allouée.
# -*- coding: utf-8 -*-
"""
Introduction à OpenCV, projet encadre IVI
@author: Olivier Losson
"""

# Importer les paquets nécessaires
import sys
import cv2

def infos(nomImage):
    """Affiche les informations relatives à l'image nomImage."""
    # Nom de la fenêtre d'affichage
    nomFenetre = "image"
    # Lire le fichier image
    image = cv2.imread(nomImage, cv2.CV_LOAD_IMAGE_UNCHANGED)
    if image is None: # imread retourne None en cas d'échec (pas d'exception levée)
        sys.exit("Impossible de charger l'image "+nomImage)
    # Créer une fenêtre et y afficher l'image
    cv2.namedWindow(nomFenetre)
    cv2.imshow(nomFenetre, image)
    # Afficher des propriétés de l'image sur la console
    print "Infos sur l'image", nomImage
    print "Taille totale (octets) : ", image.size
    print "Appuyer sur une touche pour terminer."
    # Sur appui d'une touche, fermer la fenêtre
    cv2.waitKey(0)
    cv2.destroyWindow(nomFenetre)
  1. Modifier ce code pour afficher les 4 propriétés d'image suivantes :
    • Définition (largeur x hauteur) (en pixels)
    • Type de données
    • Profondeur d'un canal (en bits)
    • Nombre de canaux (à calculer)
  2. Utiliser ce programme pour ouvrir l'image gateaux1.png, puis gateaux2.png, puis gateaux3.png et enfin lena.png.
Quelles sont les valeurs des 4 propriétés de chaque image ? Pour une image donnée, les valeurs de ces 4 propriétés sont-elles indépendantes ? Interpréter ces valeurs au regard de l'image affichée, notamment leurs différences entre les 3 images de gâteaux.

Image en niveaux de gris ou couleur ?

  1. Modifier le mode d'ouverture de l'image en le forçant à CV_LOAD_IMAGE_COLOR ou CV_LOAD_IMAGE_GRAYSCALE, puis réouvrir chaque image dans chaque cas.
Pour chaque image, auquel de ces 2 modes d'ouverture correspond en fait l'ex-mode CV_LOAD_IMAGE_UNCHANGED ? Quel est le lien entre gateaux1 et gateaux2 ?

Pour répondre à cette question, il pourra être utile d'afficher l'image en utilisant le paquet pyplot au lieu d'OpenCV :

import matplotlib.pyplot as plt
    ...
    plt.imshow(image, cmap='gray')
    plt.show()