Recommend converting the image from RGB values into HSV values.
Then the more discrete Hues the image has, the more colourful it can be considered.
For performance, you you can probably just take a subsample of the image, and / or reduce the number of Hue 'silos' or quanta.
Wiki is your friend
Edit 'Evenness':
Well, I guess you could use standard deviation approach to this by assuming that the ideal 'mean' would be an 'even' distribution of pixels across the Hue bins (i.e. mean = Total #Pixels divided by Total number of discrete Hue bins). Standard deviation would then be the square of the difference between the actual count and this mean. There are some caveats with this approach, as the squaring would heavily penalise any Hue bins with very low or very high counts (you might want to 'cap' the histogram range). You would also need to standardise the number of pixels (for counting) and the number of Hue bins across images to normalise the comparisons.
Another issue is that for a high number of Hue bins, that equal weighting is given to all hues, irrespective of the 'distance' of light wavelength between them (e.g. an image with just lots of different blue hues would count equally to an image with a few discrete shades of red green and blue - this is where volume approaches mentioned by other posters may be preferable.