Как проверить, содержит ли изображение RGB только один цвет? - PullRequest
4 голосов
/ 24 марта 2009

Я использую 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)

Ответы [ 3 ]

5 голосов
/ 24 марта 2009

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

0 голосов
/ 24 марта 2009

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


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

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

0 голосов
/ 24 марта 2009

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

...