获得支配色彩opencv

时间:2013-06-03 10:57:57

标签: opencv image-processing colors

我的图像是多色的。

enter image description here

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

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

我怎样才能获得主导色彩呢?我的最终项目应该自己确定对象的最大颜色。对此最好的方法是什么?

2 个答案:

答案 0 :(得分:9)

在搜索最常用的颜色之前,您应该quantize(减少颜色数量)。

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

阅读此讨论:How to reduce the number of colors in an image with OpenCV?。这是一个简单的例子:

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

这就是我申请后所得到的:

enter image description here

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

答案 1 :(得分:7)

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

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

histogram

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

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