#python #image #colors #python-imaging-library
Вопрос:
У меня есть изображение, состоящее из 25 цветов. Его разрешение 720×1280 , и я хочу уменьшить его до 144×256 (оно находится в соотношении с исходным). Я использую PIL в python для достижения той же цели
Вот мой код:-
o=PIL.Image.open('original25.png')
o=o.resize((144,256),resample=PIL.Image.LANCZOS)
o.save('3_.png')
Проблема в том, что новое изображение имеет много цветов (около 15000), в то время как исходное изображение имело только 25 цветов.
Как уменьшить размер изображения без увеличения количества цветов?
Примечание:-Я немного поэкспериментировал со своей стороны и поиграл с фильтром «повторная выборка». Используя БЛИЖАЙШУЮ опцию, в конечном результате было только 25 цветов, которые я хотел. Но, к сожалению, качество изображения стало очень плохим и было заполнено белыми пикселями (практически непригодными для использования). А при использовании БИЛИНЕЙНЫХ /БИКУБИЧЕСКИХ /ЛАНЦЕТОВ количество цветов увеличивалось
Редактировать:- Пример изображения https://drive.google.com/file/d/1tBjnU1NkN0x72tHTuCQOBZUxTfxNxq9w/view?usp=sharing
Комментарии:
1. В MATLAB есть простое решение с использованием rgb2ind . Я не могу найти эквивалент Python. Вы можете попробовать подход K-Средних для уменьшения количества цветов. Вы также можете рассмотреть возможность использования ImageMagick (существует привязка Python с именем Wand).
2. Пожалуйста, опубликуйте изображение.
3. @HansHirse Привет, я только что добавил пример
4. @Rotem Спасибо за ответ. Да, я могу использовать любую библиотеку python, и я обязательно попробую ваши предложения
5. Может быть, вы могли бы уточнить, почему вам нужно 25 цветов? А если вам обязательно нужны точно такие же 25 цветов, с которых вы начинали?
Ответ №1:
Используйте повторную выборку «Ближайший сосед» вместо Lanczos, чтобы сохранить оригинальные цвета.
Или, если после изменения размера можно использовать 25 новых цветов, вы можете использовать Lanczos для изменения размера, Image.quantize()
а затем вернуться к 25 цветам — предпочтительно с помощью метода LIBIMAGEQUANT.
Вот что делает ImageMagick с помощью пересчета ближайших соседей — вы не показываете свой «супер дрянной» результат:
Комментарии:
1. Спасибо за ответ. Да, я могу использовать любой из 25 цветов (необязательно использовать те же 25 цветов в оригинальном).