获得支配色彩opencv

ris*_*ish 5 opencv colors image-processing

我有一个多色的图像.

在此输入图像描述

我想计算图像的主色.主导颜色是红色,我想过滤掉红色.我在opencv中执行以下代码但它没有执行.

inRange(input_image, Scalar(0, 0, 0), Scalar(0, 0, 255), output);
Run Code Online (Sandbox Code Playgroud)

我怎么能得到主导色呢?我的最终项目应该自己确定对象的最大颜色.这方面最好的方法是什么?

Art*_*huk 9

在搜索最常用的颜色之前,您应该对图像进行量化(减少颜色数量).

为什么?想象一下,有100像素(0,0,255)(蓝色RGB RGB),100像素(0,0,254)(几乎是蓝色 - 你甚至找不到差异)和150像素(0,255,0)(绿色)的图像.这里最常见的颜色是什么?显然,它是绿色的.但量化后,您将获得200像素的蓝色和150像素的绿色.

阅读本讨论:如何使用OpenCV减少图像中的颜色数量?.这是一个简单的例子:

int coef = 200;
Mat quantized = img/coef;
quantized = quantized*coef;
Run Code Online (Sandbox Code Playgroud)

这是我应用它后得到的:

在此输入图像描述

你也可以使用k-means或mean-shift来做到这一点(这是非常有效的方式).


Boy*_*nov 7

最好的方法是分析直方图.

你的问题是经典的"找到峰值和峰值区域".通过拥有一个图像文件(假设为了简单起见,我们只采用第三​​个通道):

直方图

您必须在该直方图中找到最高峰.最简单的方法是简单地查询Y最大化的X. 更高级的方法适用于Windows - 它们平均10个连续数据点的Y值等.

此外,在HSV或YCrCb色彩空间中工作.HSV很好,因为"Hue"频道非常接近"Color"的含义.RGB实际上不太适合图像分析.