Python как получить список цветов, которые используются в одном изображении - PullRequest
5 голосов
/ 10 января 2011

Python, как получить список цветов, которые используются в одном изображении

Я использую PIL, и я хочу иметь словарь цветов, которые используются в этом изображении, включая цвет (ключ) и количествопиксельные точки, которые он использовал.

Как это сделать?

Ответы [ 4 ]

23 голосов
/ 10 января 2011

Метод getcolors должен помочь. См. документы .

Редактировать : эта ссылка не работает. Подушка, кажется, теперь свободна, раздвоена от PIL. Новые документы

Image.open('file.jpg').getcolors() => a list of (count, color) tuples or None
8 голосов
/ 17 марта 2014

Я хотел бы добавить, что функция .getcolors () работает только в том случае, если изображение находится в каком-либо режиме RGB.

У меня была такая проблема, когда она возвращала список кортежей с (считать, цвет), где цвет был просто число.Мне потребовалось некоторое время, чтобы найти его, но это исправило его.

from PIL import Image
img = Image.open('image.png')
colors = img.convert('RGB').getcolors() #this converts the mode to RGB
5 голосов
/ 10 января 2011

Я использовал что-то вроде следующего несколько раз для анализа графиков:

>>> from PIL import Image
>>> im = Image.open('polar-bear-cub.jpg')
>>> from collections import defaultdict
>>> by_color = defaultdict(int)
>>> for pixel in im.getdata():
...     by_color[pixel] += 1
>>> by_color
defaultdict(<type 'int'>, {(11, 24, 41): 8, (53, 52, 58): 8, (142, 147, 117): 1, (121, 111, 119): 1, (234, 228, 216): 4

Т.е. есть 8 пикселей со значением rbg (11, 24, 41) и т. Д.

0 голосов
/ 21 февраля 2018

См. https://github.com/fengsp/color-thief-py "Извлекает доминирующий цвет или типичную цветовую палитру из изображения. Использует Python и Pillow"

from colorthief import ColorThief

color_thief = ColorThief('/path/to/imagefile')
# get the dominant color
dominant_color = color_thief.get_color(quality=1)
# build a color palette
palette = color_thief.get_palette(color_count=6)
...