有时候我们需要找出一张图片中的主色调,这里的主色调并不是指颜色最多的,而是指最“醒目”的。
例如 win8 在更换桌面壁纸后,会将任务栏的背景色改为该壁纸的主色调。
看下面几张图可以更直观的明白“醒目”的意思。
(这张图里面最醒目的无疑是紫红色的小花,而不是颜色占大多数的淡青色背景)
(这张图也一样,最醒目的颜色应该是深红色,而不是深蓝色)
我想了一个简单的办法,就是根据图片中每个像素的色调值去判断哪些像素符合“醒目”这个特性。
分三步进行
1.计算整个图片的色调的平均值 (avg_hue)
2.遍历每个像素,计算该像素的色调值与 avg_hue 的色差(即将二者相减后取绝对值),如果该色差大于一个阈值(本文中取 30),
则将该像素加入到“醒目像素”的列表
3.计算整个“醒目像素列表”的颜色均值,得到的结果即为该图片的主色调。
下面看看该算法的效果如何
我将计算出的主色调画在原图的左上角,以方便对比。结果如下
可以看到基本上达到了我想要的效果。
下面给出具体代码,代码未经任何优化,速度比较慢。
?
|
获取图片的主色调,码迷,mamicode.com