Как получить набор цветов в изображении с помощью Python PIL - PullRequest
1 голос
/ 23 июня 2019

После импорта изображения с использованием модуля PIL в python, я хотел бы получить набор цветов на изображении в виде списка кортежей rgb.

Что, если я знаю заранее, что будет только 2 цвета и изображение будет очень маленьким, возможно, 20x20 пикселей? Тем не менее, я буду использовать этот алгоритм на многих изображениях. Будет ли эффективнее проходить все пиксели, пока я не увижу 2 уникальных цвета? Потому что я понимаю, что петли очень медленно в питоне.

1 Ответ

2 голосов
/ 23 июня 2019

Во-первых, давайте сделаем изображение. Я просто использую ImageMagick , чтобы сделать синий фон с пурпурной надписью:

convert -size 300x120 -background blue -fill magenta -gravity center -font AppleChancery label:"StackOverflow" PNG24:image.png

enter image description here

Как видите, я указал только два цвета - пурпурный и синий, но изображение PNG на самом деле содержит более 200 цветов, а изображение JPEG содержит 2370 разных цветов!

Итак, если я хочу получить два основных цвета, я могу сделать это:

from PIL import Image

# Open the image
im = Image.open('image.png') 

# Quantize down to 2 colour palettised image using *"Fast Octree"* method:
q = im.quantize(colors=2,method=2)

# Now look at the first 2 colours, each 3 RGB entries in the palette:
print(q.getpalette()[:6])

Образец результата

[0, 0, 255, 247, 0, 255]

Если вы записали это как 2 RGB-триплета, вы получите:

RGB 0/0/255   = blue
RGB 247/0/255 = magenta

Лучший способ сделать это для большого количества изображений - использовать многопоточность или многопроцессорность, если вы хотите, чтобы они выполнялись быстро!

Ключевые слова : Python, PIL, Подушка, изображение, обработка изображений, октри, быстрое октри, квантование, квантование, палитра, палитра, палитризация, уменьшение цветов, уменьшение цветов, сглаживание, шрифт, уникальный , уникальные цвета, уникальные цвета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...