【问题标题】: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)。

【问题讨论】:

    标签: algorithm image ios colors photo


    【解决方案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 我们的团队浪费了很多时间来响应你的演示,它只是有一个错误。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2012-02-16
    • 2012-11-12
    相关资源
    最近更新 更多