Я хочу уменьшить битовую глубину (глубину цвета) изображения до набора настраиваемых цветов в Python. По сути, дать программе набор из x цветов и связать каждый пиксель полноцветного изображения с ближайшим цветом из данного списка. У меня возникли проблемы с библиотекой Pillow, как показано ниже.
Этот код правильно уменьшит цвета в изображении Z.png до 4 цветов на основе палитры цветов, созданной из самого изображения:
from PIL import Image
colorImage = Image.open("Z.png")
imageWithColorPalette = colorImage.convert("P", palette=Image.ADAPTIVE, colors=4)
imageWithColorPalette.save("Output.png")
from IPython.display import Image
Image('Output.png')
Этот код похож, за исключением того, что я пытался использовать свою собственную цветовую палитру. Проблема в том, что этот код возвращает то же изображение, что и приведенный выше код, и, кажется, просто go с адаптивной палитрой и игнорирует пользовательский, который я пытался указать:
from PIL import Image
pall = [
0, 0, 0,
255, 0, 0,
255, 255, 0,
255, 153, 0,
]
colorImage = Image.open("Z.png")
imageWithColorPalette = colorImage.convert("P", palette=pall, colors=4)
imageWithColorPalette.save("Output.png")
from IPython.display import Image
Image('Output.png')
На основе документа из здесь: https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL .Image.Image.convert и здесь https://pillow.readthedocs.io/en/3.0.x/reference/ImagePalette.html. Я предполагаю, что мой pall задан в неправильном формате / размере или что мне нужно включить аргумент matrix в метод convert . Согласно документации, аргумент матрица равен 'Необязательная матрица преобразования. Если задано, это должен быть 4- или 12-кортеж, содержащий значения с плавающей запятой. ', что я не знаю, как реализовать.
Какой бы ни была проблема, я очень застрял и хотел бы получить некоторую помощь.
Альтернативно, есть ли лучшая Python библиотека для этой задачи, поскольку я открыт для предложений.