获取图像主色的快速方法[关闭]

Posted

技术标签:

【中文标题】获取图像主色的快速方法[关闭]【英文标题】:Fast way of getting the dominant color of an image [closed] 【发布时间】:2011-06-30 07:58:03 【问题描述】:

我有一个关于如何获得图像(照片)的主色的问题。我想到了这个算法:遍历所有像素并获取它们的颜色,红色、绿色、黄色、橙色、蓝色、洋红色、青色、白色、灰色或黑色(当然有一些边距),它是黑暗的(浅色、深色或正常),然后检查哪些颜色出现最多。我认为这很慢而且不是很精确。有没有更好的办法?


如果重要的话,它是从 iPhone 或 iPod touch 相机拍摄的 UIImage,最多 5 Mpx。它必须快速的原因是简单地显示进度指示器并没有多大意义,因为这适用于视力不佳或根本没有视力的人的应用程序。因为它是用于移动设备的,所以它可能不会占用太多内存(最多 50 MB)。

【问题讨论】:

【参考方案1】:

您的一般方法应该可行,但我会强调一些细节。

代替您给定的颜色列表,在色谱中生成许多颜色“箱”来计算像素。这是另一个有一些算法的问题:Generating spectrum color palettes 使 bin 的数量可配置,这样您就可以进行试验以获得您想要的结果。

接下来,对于您正在考虑的每个像素,您需要找到要增加的“最近”颜色箱。您需要定义“最近”;看这篇关于“色差”的文章:http://en.wikipedia.org/wiki/Color_difference

为了提高性能,您无需查看每个像素。由于图像元素通常覆盖较大的区域(例如天空、草地等),因此您只需采样几个像素即可获得所需的结果。我猜你可以每 10 个像素,甚至每 100 个像素采样一次,得到很好的结果。你也可以尝试这个因素。

[编者注:编辑以下段落以适应 Mike Fairhurst 的评论。]

也可以进行平均像素,如本演示:jsfiddle.net/MUsT8/

【讨论】:

平均颜色的演示显示绿色背景,因为在设置 RGB 背景颜色时存在拼写错误,因此绿色和蓝色值位于错误的位置。修正后,“平均”RGB 为蓝色,正如您对非常蓝色的示例图像所期望的那样。 我刚刚发布了一个小型 javascript 库 (pieroxy.net/blog/pages/color-finder/index.html),它的功能与您所描述的差不多。您还可以通过反馈方法使算法偏向您的颜色偏好。这是一个现场演示:pieroxy.net/blog/pages/color-finder/demo.html。希望这会有所帮助。 请更新您的答案以修复下面评论中提到的错误。一个更正的小提琴在这里:jsfiddle.net/MUsT8 我们的团队浪费了很多时间来响应你的演示,它只是有一个错误。

以上是关于获取图像主色的快速方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 XMLHttpRequest 为 RGB 图像生成主色

获取uiview的主色、次色和三次色

sketch里图片取色本可以这么快:Alembic

常见的几种抠图方式?

使用 ImageMagick 从图像生成调色板

在图像上查找主色