Используя pixel_labels, как разделить объекты на изображении по цвету, что приведет к созданию трех изображений в python - PullRequest
0 голосов
/ 01 ноября 2019

Я использую алгоритм Kmeans для создания кластеров в изображении, но я хотел отобразить отдельные кластеры изображения. Пример, если значение K = 3 для изображения, тогда я хотел сохранить каждую отдельную часть кластера в другом файле. Я хочу реализовать этот код, используя python.

Я применил кластерный алгоритм кластеризации KMeans, но на том же графике.

1 Ответ

1 голос
/ 02 ноября 2019

Давайте начнем с Паддингтона слева и предположим, что у вас есть k-means, сгруппировавший его до 3 цветов на правом / втором изображении:

enter image description here enter image description here

Теперь мы находим уникальные цвета и перебираем их. Внутри цикла мы используем 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

enter image description here

enter image description here


Измените строку 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

enter image description here

enter image description here

Ключевые слова : изображение, обработка изображений, кластеризация k-средних, уменьшение цвета, уменьшение цвета, Python, OpenCV, цветоделение, уникальные цвета, уникальные цвета.

...