Как проверить, содержит ли RGB-изображение только один цвет?

Я использую Python и PIL.

У меня есть изображения в RGB, и я хотел бы знать тех, кто содержит только один цвет (например, # FF0000) или несколько очень близких цветов (# FF0000 и # FF0001).

Я думал об использовании гистограммы, но очень сложно понять что-то с 3-мя цветными полосами, поэтому я ищу более умный алгоритм.

Есть идеи?

Модуль ImageStat – это ответ! Спасибо Аарону. Я использую ImageStat.var, чтобы получить дисперсию, и она отлично работает.

Вот мой кусок кода:

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) 

    Попробуйте модуль ImageStat . Если значения, возвращаемые extrema , одинаковы, у вас есть только один цвет на изображении.

    Во-первых, вы должны определить расстояние между двумя цветами. Тогда вам просто нужно проверить для каждого пикселя, что это расстояние до вашего цвета достаточно мало.

    Вот небольшой фрагмент, который вы могли бы использовать:

     import Image im = Image.open("path_to_image") width,height = im.size for w in range(0,width): for h in range(0,height): # this will hold the value of all the channels color_tuple = im.getpixel((w,h)) # do something with the colors here 

    Может быть, использовать хеш и хранить кортежи в качестве ключа, а количество явлений в качестве значения?