从图像中提取主要/最常用的颜色

Posted

技术标签:

【中文标题】从图像中提取主要/最常用的颜色【英文标题】:Extracting Dominant / Most Used Colors from an Image 【发布时间】:2010-12-19 18:02:14 【问题描述】:

我想提取图像中最常用的颜色,或者至少是主色调 你能推荐我如何开始这项任务吗?或指向我类似的代码?我一直在寻找它,但没有成功。

【问题讨论】:

您使用什么语言或框架? 答案在很大程度上取决于您的环境。 嗯,我考虑处理只是为了概念验证,然后将其转换为 python 进行批处理 如果您喜欢某个答案,您可以考虑单击向上箭头表示它很有用。如果您认为答案是您问题的解决方案,则应单击复选标记将其选为已接受的答案。 谢谢你,我不知道,我刚刚在这个很棒的社区注册!但我无法点击向上箭头,因为我的业力为零:( 【参考方案1】:

使用Octree Color Quantization algorithm 可以获得非常好的结果。其他量化算法见Wikipedia。

【讨论】:

这正是我想要的!非常感谢! @dineshprasanna,不,我不能。如果 Google 无法帮助您,那么您可能需要使用链接中提供的信息自己编写。【参考方案2】:

好吧,我假设您可以访问每个像素的 RGB 颜色。根据您的需要,有两种方法可以实现。

首先,您可以简单地创建所有像素的 R、G 和 B。像这样。

一个伪代码。


int Red   = 0;
int Green = 0;
int Blue  = 0;
foreach (Pixels as aPixel) 
    Red   += aPixel.getRed();
    Green += aPixel.getGreen();
    Blue  += aPixel.getBlue();

然后看看哪个更多。

这给你的只是图片更红、更绿或更蓝。

通过简单地创建每个 RGB 组合的直方图,另一种方法也可以为您提供组合颜色的静态(如橙色)。

一个伪代码。


Map ColorCounts = new();
foreach (Pixels as aPixel) 
    const aRGB   = aPixel.getRGB();
    var   aCount = ColorCounts.get(aRGB);
    aCount++;
    ColorCounts.put(aRGB, aCount);

然后看看哪个计数更多。 您还可以降低颜色分辨率,因为常规 RGB 着色最多可以提供 670 万种颜色。

这可以通过将 RGB 设置为颜色范围来轻松完成。例如,假设 RGB 是 8 步而不是 256。

一个伪代码。



function Reduce(Color) 
    return (Color/32)*32; // 32 is 256/8 as for 8 ranges.

function ReduceRGB(RGB) 
    return new RGB(Reduce(RGB.getRed()),Reduce(RGB.getGreen() Reduce(RGB.getBlue()));


Map ColorCounts = new();
foreach (Pixels as aPixel) 
    const aRGB   = ReduceRGB(aPixel.getRGB());
    var   aCount = ColorCounts.get(aRGB);
    aCount++;
    ColorCounts.put(aRGB, aCount);

然后你可以看到哪个范围的计数最多。

我希望这些技巧对你有意义。

【讨论】:

【参考方案3】:

我同意 cmets - 编程解决方案肯定需要更多信息。但在那之前,假设您将获得图像中每个像素的 RGB 值,您应该考虑HSV colorspace,其中色调可以说是代表每个像素的“色调”。然后,您可以使用histogram 来识别图像中最常用的色调。

【讨论】:

注: “HSV 颜色空间”很可能是指“HSV 模式 RGB 模型”——HSV(及其兄弟双胞胎 HSL)是 RGB 颜色模型的失真;几乎所有提到 RGB 模型(或者错误地称为“RGB 颜色空间”)的人都在处理 CIE-XYZ'39 颜色 空间 中的值表示。没有试图专门挑剔你的答案,但你去吧。

以上是关于从图像中提取主要/最常用的颜色的主要内容,如果未能解决你的问题,请参考以下文章

常用的图像彩色模型

常用的图像彩色模型

图像处理系统的分析工具

从图像中提取最常见的颜色

如何从一系列文本条目中提取常用/重要短语

从 Gradle 构建脚本中提取常用方法