Мне нужно решить следующую проблему:
ВХОД: изображение IM, палитра PA
ВЫХОД: IM только с цветами PA
Входное изображение в формате RGB, но я могу преобразовать его в HSV. Указанная в данный момент целевая цветовая палитра содержит: черный, белый, светло-серый, серый, темно-серый, синий, розовый, красный, фиолетовый, зеленый, желтый, коричневый, оранжевый.
Я много искал для этого, но я могу найти только уменьшение изображения до наиболее распространенных цветов или уменьшение его до фиксированной палитры, такой как 16-цветная графика EGA.
Я нашел лучший ответ на это:
Как я могу преобразовать любое изображение в изображение с 4 цветами, используя библиотеку изображений Python?
Он имеет входную палитру и сводит изображение к этому. Есть ли такой же способ сделать в OpenCV с C ++?
Так как ваша палитра фиксирована, вы можете использовать метод сглаживания, такой как Флойд Стейнберг наряду с соответствующей мерой цветового сходства, например, в Лаборатория цветового пространства.
Предположим, что цветовое пространство RGB является трехмерным кубом
А также Palette PA
несколько точек в этом кубе. Таким образом, наша проблема сводится к поиску ближайшего Palette PA
очко за любой данный rgb
точка в трехмерном пространстве.
Я думаю, что лучшее решение k-d tree
В конце вики-страница Вы можете найти несколько ссылок для реализации C ++