Получение доминирования цвета OpenCV

У меня есть изображение, которое является разноцветным.

Я хочу рассчитать доминирующий цвет изображения. доминирующий цвет - красный, я хочу отфильтровать красный. я делаю следующий код в opencv, но он не выполняет.

inRange(input_image, Scalar(0, 0, 0), Scalar(0, 0, 255), output);

Как я могу получить доминирующий цвет в противном случае? Мой окончательный проект должен определить максимальный цвет объекта самостоятельно. Каков наилучший метод для этого?

Ответы на вопрос(2)

Твоя проблема классическаянайти вершину и площадь под вершиной, Имея файл изображения (пустьскажем, для простоты мы берем только третий канал):

Вам нужно будет найти самый высокий пик в этой гистограмме. Самый простой способ - просто запросить X, для которого Y максимизировано. Более продвинутые методы работают с окнами - они усредняют значения Y для 10 последовательных точек данных и т. Д.

Также работайте в цветовом пространстве HSV или YCrCb. HSV это хорошо, потому чтоОттенок» канал переводит очень близко к тому, что вы подразумеваете под "Цвет", RGB действительно не очень подходит для анализа изображений.

 a.lasram20 мая 2014 г., 04:50
победила отдельная гистограмма для каналов R, G и B 'помогает найти доминирующий цвет. Вам нужна одна гистограмма, где один бин представляет собой тройку RGB. Конечно, размер будет увеличиваться в геометрической прогрессии с количеством каналов, но 3 канала остаются управляемыми плюс, вы можете использовать контейнер какstd::unordered_multiset как разумное решение
 Boyko Perfanov21 мая 2014 г., 13:55
Конечно, это станет трехмерной задачей, сложность которой гораздо выше.

квантовать (уменьшите количество цветов) ваше изображение перед поиском наиболее часто встречающихся цветов.

Зачем? Представьте себе изображение, которое имеет 100 пикселей(0,0,255) (синий цвет в RGB), 100 пикселей(0,0,254) (почти синий - ты даже выигралнайти разницу) и 150 пикселей(0,255,0) (Зеленый). Какой цвет здесь чаще всего? Очевидно, этос зеленым. Но после квантования вы получите 200 пикселей синего и 150 пикселей зеленого.

Прочитайте это обсуждение:Как уменьшить количество цветов в изображении с OpenCV?, Вот'Простой пример:

int coef = 200;
Mat quantized = img/coef;
quantized = quantized*coef;

И это то, что ямы получили после применения:

Также вы можете использовать k-means или mean-shift для этого (это очень эффективный способ).

Ваш ответ на вопрос