我有一个多色图像。
我想计算图像的主色。主色是红色,我想过滤掉红色。我在 opencv 中执行以下代码,但它没有执行。
inRange(input_image, Scalar(0, 0, 0), Scalar(0, 0, 255), output);
否则我怎样才能获得主色?我的最终项目应该自行确定对象的最大颜色。最好的方法是什么?
最佳答案
你应该 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;
这是我应用后得到的结果:
您也可以使用 k-means 或 mean-shift 来做到这一点(这是非常有效的方法)。
关于opencv - 获取主导色opencv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895135/