Well, I think my answer was sort of incomplete! It is a good and legitimate question, why the replacement is only working on the data, but not on the image itself. The reason is that Image
yields an atomic object:
img = Image[RandomReal[1, {2, 2, 3}], ImageSize -> 200];
AtomQ[img] (* Out: True *)
And that means that one has no access to its subparts, i.e. one can not do things like replacements or e.g.:
List @@ img
Regards -- Henrik