Насчёт уменьшения количества цветов могу подсказать одну идею.
Собираешь коллекцию всех цветов на изображении. Это будет своего рода облако точек в пространстве координат R-G-B. Можешь либо брать все пиксели, либо только уникальные цвета - посмотри, что будет лучше работать.
Потом применяешь метод k-средних, чтобы это облако разбить на желаемое число кластеров. Реализации
метода k-средних можно найти в пакете opencv-python (он же cv2), вместе с механикой загрузки растровых изображений.
У тебя получится набор из 24 точек - центров кластеров. Это и будут итоговые цвета, только округли их R-G-B координаты до ближайшего целого.
Затем для каждого пикселя изображения находишь центр кластера, ближайшего к его цвету. Это будет цвет, которым надо будет перекрасить пиксель.
Мне скорее интересно, как ты собираешься растровое изображение превратить в векторное - это ведь нетривиальная штука.