Давайте начнем с Паддингтона слева и предположим, что у вас есть k-means, сгруппировавший его до 3 цветов на правом / втором изображении:
![enter image description here](https://i.stack.imgur.com/K5QFf.png)
Теперь мы находим уникальные цвета и перебираем их. Внутри цикла мы используем np.where()
, чтобы установить все пиксели текущего цвета на белый, а все остальные на черный:
#!/usr/bin/env python3
import cv2
import numpy as np
# Load kmeans output image
im = cv2.imread('kmeans.png')
# Get list of unique colours
uniquecols = np.unique(im.reshape(-1,3), axis=0)
# Iterate over unique colours
for i, c in enumerate(uniquecols):
filename = f"colour-{i}.png"
print(f"Processing colour {c} into file {filename}")
# Make output image white wherever it matches this colour, and black elsewhere
result = np.where(np.all(im==c,axis=2)[...,None], 255, 0)
cv2.imwrite(filename, result)
Пример вывода
Processing colour [48 38 35] into file colour-0.png
Processing colour [138 140 152] into file colour-1.png
Processing colour [208 154 90] into file colour-2.png
И три изображения:
![enter image description here](https://i.stack.imgur.com/0YEhU.png)
![enter image description here](https://i.stack.imgur.com/UOJBg.png)
![enter image description here](https://i.stack.imgur.com/vVd4Z.png)
Измените строку np.where()
следующим образом, если вы предпочитаете альтернативный выход:
# Make output image white wherever it doesn't match this colour
result = np.where(np.all(im==c,axis=2)[...,None], c, 255)
![enter image description here](https://i.stack.imgur.com/bDT9V.png)
![enter image description here](https://i.stack.imgur.com/fLeQh.png)
![enter image description here](https://i.stack.imgur.com/AsIw5.png)
Ключевые слова : изображение, обработка изображений, кластеризация k-средних, уменьшение цвета, уменьшение цвета, Python, OpenCV, цветоделение, уникальные цвета, уникальные цвета.