Rotation d’image

Objectif : faire tourner une image d’un quart de tour et comparer différentes méthodes

Introduction

Pour manipuler une image, nous utiliserons le module PIL.

Utilisation de PIL

Import de la classe Image du module PIL :

from PIL import Image

Création d’un objet Image à partir d’un fichier

img = Image.open('montgolfiere_128.jpg')

Création d’une nouvelle image (en mode RGB) :

img = Image.new("RGB", (largeur, hauteur))

Remarque : cette nouvelle image aura des pixels noirs.

Affichage de l’image :

img.show()

Obtention des dimensions de l’image :

largeur, hauteur = img.size

Obtention d’un pixel de coordonnées x et y :

pixel = img.getpixel((x, y))

Rappel : dans le cas d’une image en couleur, un pixel est formé de 3 valeurs (entiers sur 8 bits) représentant les quantités de rouge, de vert et de bleu dans la couleur. Certains formats d’image incluent un 4ème nombre représentant la transparence du pixel.

Modification d’un pixel de coordonnées x et y :

 img.putpixel((x, y), pixel)

 

 

Méthode simple

Télécharger l’image suivante :

En première approche, on se propose de procéder de la manière suivante :

  • Créer une nouvelle image (noire !) aux dimensions de l’image originale (en inversant largeur et hauteur !),
  • Parcourir un à un chaque pixel de l’image originale et le placer à la bonne place dans l’image tournée.

 

Écrire une fonction rotation_simple(img) qui attend un argument de type Image et retourne une nouvelle image tournée d’un quart de tour. L’image originale n’est pas modifiée.

 

 

 

 

Méthode récursive

Afin de travailler en espace mémoire constant, on se propose de faire tourner l’image en place, c’est à dire sans créer de nouvelle image.

Pour cela nous travaillerons sur une image carrée, en utilisant une méthode de type diviser pour régner.

Télécharger l’image suivante :

 

La méthode proposée consiste à :

  • Diviser l’image en 4 quadrants de mêmes dimensions.
  • Opérer une permutation circulaire de ces quadrants
  • Tourner récursivement chacun des 4 quadrants …
  • La récursion s’arrête lorsque le quadrant ne peut plus être divisé (il ne comporte qu’un seul pixel)

Voici le résultat :

 

Écrire une première fonction permutation_quadrants(img, x, y, n) permettant la permutation de 4 quadrants de dimension n de l’image img, à partir du pixel de coordonnées x et y.
Aide : il faut faire un croquis !

 

Écrire une fonction rotation_recurs(img, x, y, n), réalisant récursivement la rotation d’un portion carrée (de dimension n) de l’image img, à partir du pixel de coordonnées x et y.

 

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *