Как в opencv определить доминирующий цвет?

На вход дается изображение и нужно определить какой цвет - доминант.
или красный или зеленый или черный.
но вот как реализовать совсем не знаю..
  • Вопрос задан
  • 3558 просмотров
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
За минуту нагуглил пример из документации и несколько статей - раз, два, три. Ещё минута понадобилась на то, чтобы проверить работу кода:
import cv2
import numpy as np
from sklearn.cluster import KMeans
from collections import Counter


def get_dominant_color(image, k=4):
    image = image.reshape((image.shape[0] * image.shape[1], 3))

    clt = KMeans(n_clusters = k)
    labels = clt.fit_predict(image)

    label_counts = Counter(labels)

    dominant_color = clt.cluster_centers_[label_counts.most_common(1)[0][0]]

    return list(dominant_color)


bgr_image = cv2.imread('image.png')
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)
dom_color = get_dominant_color(hsv_image)
dom_color_hsv = np.full(bgr_image.shape, dom_color, dtype='uint8')
dom_color_bgr = cv2.cvtColor(dom_color_hsv, cv2.COLOR_HSV2BGR)
output_image = np.hstack((bgr_image, dom_color_bgr))
cv2.imshow('Dominant Color', output_image)
cv2.waitKey(0)
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
ну задачка не одной командой делается, хотя бы потому что алгоритмы разные

https://stackoverflow.com/questions/28793985/find-...

https://habr.com/post/156045/
https://stackoverflow.com/questions/48480648/what-...
Ответ написан
adugin
@adugin Куратор тега Python
Это легко делается с помощью PIL (Pillow) и numpy:
dominant_color = numpy.array(image.histogram(), dtype=np.int32).reshape(-1, 256).argmax(axis=1)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы