Certainly. For instance, here's how to reduce the number of colours to 10 (randomly chosen in RGB space):
i = Import["ExampleData/lena.tif"]

You can try ImageData[i] to see the actual RGB values for each pixel. Now produce ten random triplets of reals between 0. and 1., and construct a function to quickly pick the one closest to some given number:
colours = RandomReal[{0, 1}, {10, 3}];
nf = Nearest[colours];
Then map the thing over the RGB values of the image and look at it:
Map[First[nf[#]] &, ImageData[i], {-2}] // Image

Try increasing the number of randomly selected colours to see what happens:
Manipulate[
Module[{colours = RandomReal[{0, 1}, {num, 3}], nf},
nf = Nearest[colours];
Map[First[nf[#]] &, ImageData[i], {-2}] // Image
],
{{num, 10}, 1, 1000, 1}
]
