O primeiro método de sucesso que encontrei para fazer o mesmo tipo de coisa foi usar o ImageMagick, mas com um operador diferente do anterior -separate/-swap.
O operador diferente é -recolor ou -color-matrix, dependendo da versão do ImageMagick.
Especificamente, porque eu conhecia uma “cor master” da imagem original (verde, no seu caso e no meu) e conhecia a “cor master” na imagem de resultado desejada (azul, no seu caso, laranja no meu), dei à opção -recolor/matrix do ImageMagick uma matriz de transformação com valores que reflectiam as diferenças em cada um dos canais RGB.
Por exemplo, no meu caso, a cor totalmente verde era R:141 G:198 B:63 e eu queria mudar para R:231 G:159 B:70. O resto das cores queria que fosse mudado de forma equivalente.
Então isso significa que eu queria que o valor R dos novos pixéis fosse 231/141 vezes o valor actual do vermelho. Os valores verdes eram de 159/198º dos valores actuais. E valores azuis a 63/70 dos valores actuais.
Assim:
convert input.png -recolor "1.638297872 0 0 0 0.803030303 0 0 0 1.111111111" output.png
convert input.png -color-matrix "1.638297872 0 0 0 0.803030303 0 0 0 1.111111111" output.png
ou
Isto pareceu funcionar num piscar de olhos depois de passar muito tempo sem resultados com Gimp/plugins e paint.net/plugins.