我有一张彩色的图片。
我想计算这张图片的主要颜色,主要颜色是红色,我想过滤掉红色。我使用opencv编写了以下代码,但它没有起作用。
inRange(input_image, Scalar(0, 0, 0), Scalar(0, 0, 255), output);
否则我该如何获取主导颜色?我的最终项目应该自行确定对象的最大颜色。对此,什么是最好的方法?
我有一张彩色的图片。
我想计算这张图片的主要颜色,主要颜色是红色,我想过滤掉红色。我使用opencv编写了以下代码,但它没有起作用。
inRange(input_image, Scalar(0, 0, 0), Scalar(0, 0, 255), output);
否则我该如何获取主导颜色?我的最终项目应该自行确定对象的最大颜色。对此,什么是最好的方法?
在搜索最常见的颜色之前,您应该量化(减少颜色数量)图像。
为什么?想象一下有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来实现这一点(这是更高效的方法)。
std::unordered_multiset
这样的容器作为合理的解决方案。 - a.lasram