I'm using Python and PIL.
I have images in RGB and I would like to know those who contain only one color (say #FF0000 for example) or a few very close colors (#FF0000 and #FF0001).
I was thinking about using the histogram but it is very hard to figure out something with the 3 color bands, so I'm looking for a more clever algorithm.
Any ideas?
ImageStat module is THE answer! Thanks Aaron. I use ImageStat.var to get the variance and it works perfectly.
Here is my piece of code:
from PIL import Image, ImageStat
MONOCHROMATIC_MAX_VARIANCE = 0.005
def is_monochromatic_image(src):
v = ImageStat.Stat(Image.open(src)).var
return reduce(lambda x, y: x and y < MONOCHROMATIC_MAX_VARIANCE, v, True)
In monochrome photography, tones of a single color are used to represent all the different colors within an image.
I think a technique that may work for you is to fit a straight line to the point-cloud in the RGB colour-cube of your image and then look at the least squares error and if that is small, the points lie on a line and your image is monochromatic.
The pixel is the unit of measure for a digital image. One pixel represents a single color. Colors are represented in hex, RGB, and other identification schemes. Pixels are identified by their location within the coordinate grid.
RGB Color Values Each parameter (red, green, and blue) defines the intensity of the color with a value between 0 and 255. This means that there are 256 x 256 x 256 = 16777216 possible colors!
Try the ImageStat module. If the values returned by extrema
are the same, you have only a single color in the image.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With