【问题标题】:Getting the dominant hue(s) of an image获取图像的主要色调
【发布时间】:2012-12-14 23:59:13
【问题描述】:

我正在开发一个空间壁纸共享库。我使用 JavaScript 库 color-thief 来检索图像的主要 colors,但我遇到了问题。大多数壁纸都是深色的。如果在搜索壁纸时,用户选择了像#07F 这样的蓝色,他将不会得到许多具有这种颜色的深色壁纸,因为这些壁纸的主色将接近黑色。

我可以允许使用多种主色进行搜索(例如黑色和蓝色),但这会使搜索更加复杂。

是否有任何 JavaScript 库(必须在客户端完成)能够获得图像的主要 hues?如果没有,您对我如何实现一个算法来做这件事有任何想法吗?

感谢阅读:)

【问题讨论】:

  • 我只想找到主色的色调stackoverflow.com/questions/3732046/…
  • @bkconrad,根据 OP,你会发现黑色的色调。实际上,好主意是在黑色(也可能是白色)之后找到最主要的颜色。
  • 感谢您的 cmets。奥列格的解决方案很有趣,我会考虑的。
  • @OlegV.Volkov:没有黑色或白色的色调。 #000001 的色调与#0000FF#FEFEFF 的色调完全相同。黑色和白色根本没有色调。

标签: javascript image colors


【解决方案1】:

这比 Javascript 更像是一个设计问题。主色并不总是覆盖最多像素的颜色。这是吸引你眼球的颜色。例如,如果您向某人展示黑色背景上的粉红色星系图片,则主要颜色不是黑色,而是粉红色,因为主要主题是粉红色。所以你需要一个比这更复杂的算法。

此外,从技术上讲,黑色和白色不是颜色。它们分别只是完全没有光或极端高光(或光源)。所以我会排除任何比预定义阈值更暗或更亮的东西(例如,在您的计算中排除顶部和底部的 5%)。

编辑:

我自己实际上可能会尝试在一定的阈值之上获得最饱和像素的颜色(例如,超过 X 像素数以避免由于噪声引起的误报),但会有一定的误差。

EDIT2:

您或许可以更改L155 来测试像素的饱和度和暗度。您可能想获得一个为此目的进行 RGB->HSB 转换的库,但我不知道是否有一个好的。

【讨论】:

  • 感谢您的回答!看起来和奥列格说的差不多。
  • 在数字图像中,说黑白在技术上不是颜色是没有意义的。现在,我没有费心去研究这个颜色窃贼是如何工作的,但如果它不执行任何类型的颜色聚类,那么你从中获得的主要色调大多是无用的。其次,这里发生了某种误解。没有理由只考虑主色调,而是需要 K 主色调,因此搜索单个色调 X 将返回 X 出现在其 K 主色调列表中的图像。
  • @mmgp:我们正在讨论将用户的意图转化为数据。因此,重要的是很多了解人们如何感知颜色,而不是机器如何解释像素。
  • @mmgp:补充一点,我通常同意使用 K 种主色调也是一种有效的策略。 :)
  • @bvukelic 将用户的意图转化为数据是将黑白视为实际颜色的更强有力的理由,我不确定您将如何看待这个论点。
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 2021-09-15
  • 2014-05-27
  • 2010-12-19
相关资源
最近更新 更多