Я пытаюсь использовать K-Means, чтобы найти доминирующий цвет каждого изображения в массиве изображений.В приведенном ниже примере используются KMeans из импорта из python's sklearn.cluster.
Скажем, например, у меня есть изображение размером 100x100 пикселей, я хотел бы найти доминирующий цвет блоков 5x5 в изображении 100x100.
Моя текущая реализация (ниже) использует K-Means для анализа каждого блока 5x5 по одному, что очень медленно для больших размеров изображения.Я хотел бы передать массив изображений в K-Means и вернуть ему массив доминирующих цветов, где каждый индекс в возвращенном массиве соответствует индексу в массиве изображений.
Текущая реализация:
def get_dominant_color(image):
image = image.reshape((image.shape[0] * image.shape[1], 3))
clt = KMeans(n_clusters = 4)
labels = clt.fit_predict(image)
label_counts = Counter(labels)
dominant_color = clt.cluster_centers_[label_counts.most_common(1)[0][0]]
divisor = np.sum(dominant_color)
if divisor != 0:
# normalize the rgb values
dominant_color = dominant_color / np.sum(dominant_color)
return dominant_color
Я пытался изменить это, чтобы вызвать clt.fit_predict(images)
, где images - это массив блоков 5x5, но я верю, что это будет смешивать все цвета всех изображений для получения одного вывода.Если возможно, как я могу манипулировать этим, чтобы независимо анализировать каждое отдельное изображение?