La première méthode efficace que j'ai trouvée pour faire le même genre de choses a été d'utiliser ImageMagick, mais avec un opérateur différent de celui suggéré précédemment –separate/-swap.
L'opérateur différent est soit -recolor soit -color-matrix, selon la version d'ImageMagick.
Plus précisément, parce que je connaissais une “couleur maître” de l'image originale (vert, dans votre cas et dans le mien) et que je connaissais la “couleur maître” de l'image résultante souhaitée (bleu, dans votre cas, orange dans le mien), j'ai donné à l'option -recolor/-color-matrix d'ImageMagick une matrice de transformation dont les valeurs reflètent les différences dans chacun des canaux RGB.
Par exemple, dans mon cas, la couleur entièrement verte était R:141 G:198 B:63 et je voulais qu'elle soit changée en R:231 G:159 B:70. Les autres couleurs voulaient être modifiées de manière équivalente.
Cela signifie donc que je voulais que la valeur R des nouveaux pixels soit égale à 231/141e de la valeur rouge actuelle. Les valeurs du vert doivent être 159/198e des valeurs actuelles. Et les valeurs de bleu doivent être 63/70e des valeurs actuelles.
Donc :
convert input.png -recolor "1.638297872 0 0 0 0.803030303 0 0 0 1.111111111" output.png
ou
convert input.png -color-matrix "1.638297872 0 0 0 0.803030303 0 0 0 1.111111111" output.png
ou
Cela semblait fonctionner en un clin d'oeil après avoir passé beaucoup de temps à lutter sans succès avec Gimp/plugins et paint.net/plugins.