Bonjour,
Je travaille sur un petit projet qui consiste à créer une mosaïque à partir d'une banque d'image : l'image formée au finale est constituée de plein de petites images qui forment les pixels de la grande image.
Voici une illustration que j'ai réalisée :
Pour cela, j'ai créé un dictionnaire (enregistré en .json) dont les clés sont les triplets "(R, G, B)" et les valeurs sont les noms des images dont la couleur moyenne correspond au code RGB.
Je parcours les pixels de ma grande image, et pour chacun, je cherche la couleur la plus proche dans le dictionnaire (j'utilise pour l'instant la méthode un peu améliorée de la distance euclidienne en sRGB, disponible ici (wiki).
Maintenant, je souhaite améliorer le rendu final en modifiant légèrement chaque petite image formant les "pixels" de ma grande image pour se rapprocher davantage de la couleur voulue.
Pour ce faire, j'ai calculé la différence entre le code RGB du pixel courant de la grande image et le code RGB de l'image la plus proche (dans le dictionnaire) : j'obtiens Dr, Dg, Db (les différences correspondant au rouge, vert et bleu). Puis, j'ai séparé les bandes R, G, B de ma petite image (qui remplacera le pixel) avec img.split(), que j'ai transformé en 3 tableaux numpy avec numpy.array(img), et auxquels j'ai ajouté les différences divisées par deux Dr//2, Dg//2 et Db//2.
Le résultat est décevant. J'ignore pourquoi, mais à certains endroits, les couleurs sont très forcées :
Je m'y prend peut-être mal.
Quelqu'un pourrait-il m'aider à résoudre mon problème ?
Partager