Modifications entre les versions 5 et 6
Version 5 à la date du 2013-04-01 21:39:03
Taille: 3201
Éditeur: roq13-2-78-235-210-46
Commentaire:
Version 6 à la date du 2013-04-01 21:43:51
Taille: 3748
Éditeur: roq13-2-78-235-210-46
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 15: Ligne 15:
Avant de commencer, je vous suggère d’aller piocher une image de test pas trop grosse (disons au maximum 1024 pixels dans chaque dimension). À défaut en voilà deux, obtenues à partir d’une [[https://commons.wikimedia.org/wiki/File:Tiger-2.jpg?uselang=fr|photo]] mise à disposition par Hans Stieglitz sur les ''[[https://commons.wikimedia.org/wiki/Main_Page?uselang=fr|Wikimedia commons]]'', et soumise à la licence [[ http://creativecommons.org/licenses/by-sa/3.0/deed.fr|CC-BY-SA 3.0]].
Ligne 17: Ligne 19:
Le bout de code suivant convertit le fichier

Préambule

Ce TP utilise la bibliothèque Pillow : voir les instructions.

Filtres d’image

Cette partie du TP concerne l’algorithmique de l’image. Plus précisément, on manipulera des images matricielles, c’est-à-dire représentées par des tableaux de pixels.

On utilise Pillow pour s’affranchir de la question des formats de fichiers.

Avant de commencer, je vous suggère d’aller piocher une image de test pas trop grosse (disons au maximum 1024 pixels dans chaque dimension). À défaut en voilà deux, obtenues à partir d’une photo mise à disposition par Hans Stieglitz sur les Wikimedia commons, et soumise à la licence CC-BY-SA 3.0.

Ouverture et enregistrement de fichiers d’image avec Pillow

Le bout de code suivant convertit le fichier

Application en Tk

Intégration au GIMP

Il est possible d’intégrer vos algorithmes de transformation d’image au GIMP. Il y a un côté satisfaisant à voir tourner son travail dans un programme standard. Il y a cependant deux difficultés :

  • le GIMP est seulement compatible avec Python 2 ;
  • le modèle d’image en mémoire n’est pas le même que celui de Pillow, donc il faudra modifier un peu vos algorithmes pour les adapter.

Cette partie n’est donc proposée que pour les plus motivés et autonomes.

Quelques indications pour commencer

Voilà les grandes lignes.

Il faut créer un programme Python 2, disons filtre.py, qui commence par importer le module gimpfu. Le fichier contenant ce programme doit être exécutable, et ranger dans un dossier où le GIMP cherche ses greffons (ça se règle dans les préférences).

Votre filtre doit être une fonction python filtre(image, drawable).

L’argument image est un objet complexe qui représente l’image et toute ses métadonnées (calques, etc.). L’argument drawable est la surface (calque ou canal) sur laquelle on dessine. La méthode la plus simple pour modifier l’image est de faire appel aux outils de GIMP.

Par exemple, la fonction suivante dessine un point au centre de l’image :

def centre(img,drawable):
  largeur = drawable.width
  hauteur = drawable.height
  xc = largeur//2
  yc = hauteur//2
  gimp.pdb.gimp_pencil(drawable,2,(xc,yc,xc,yc))
  return

On utilise ici l’outil « crayon » du GIMP. Pour connaître les méthodes disponibles, le GIMP fournit un « navigateur de procédures » dans le menu d’aide.

Ensuite, il faut enregistrer votre greffon dans la base de donnée, pour que le GIMP connaisse son existence. Ceci se fait avec la fonction register du module gimpfu :

register(
    "centre",
    "Rajoute un (gros) point au centre de l’image",
    "Rajoute un (gros) point au centre de l’image",
    "Lionel Vaux",
    "Lionel Vaux",
    "2013",
                "<Image>/Filters/Render/_Centre",
    "*",
    [],
    [],
    centre,
)

Après un redémarrage éventuel du GIMP, le filtre est diponible dans le menu « Filtres/Rendu ».

Youpi !

Et ensuite ?

Pour modifier directement les pixels d’une image de manière efficace, il faut utiliser les pixel regions : voir http://www.gimp.org/docs/python/. À ce point du TP, un peu de recherche autonome sur internet sera utile…

Une idée intéressante : écrire un filtre qui génère un nouveau calque affichant en transparence un diagramme de Voronoi.

WikISN: Filtres d’image (dernière édition le 2016-01-25 14:11:53 par LionelVaux)