Python通过PIL获取图片主要颜色并和颜色库进行对比的方法


Posted in Python onMarch 19, 2015

本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法。分享给大家供大家参考。具体分析如下:

这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照颜色搜索了。

在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死,开个玩笑,当然是通过机器识别的,海量的图片只有机器识别才能做到。

那用python能不能实现这种功能呢?答案是:能

利用python的PIL模块的强大的图像处理功能就可以做到,下面上代码:

import colorsys

def get_dominant_color(image):

#颜色模式转换,以便输出rgb颜色值

    image = image.convert('RGBA')

#生成缩略图,减少计算量,减小cpu压力

    image.thumbnail((200, 200))

    max_score = None

    dominant_color = None

    for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):

        # 跳过纯黑色

        if a == 0:

            continue

        saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]

        y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)

        y = (y - 16.0) / (235 - 16)

        # 忽略高亮色

        if y > 0.9:

            continue

        # Calculate the score, preferring highly saturated colors.

        # Add 0.1 to the saturation so we don't completely ignore grayscale

        # colors by multiplying the count by zero, but still give them a low

        # weight.

        score = (saturation + 0.1) * count

        if score > max_score:

            max_score = score

            dominant_color = (r, g, b)

    return dominant_color

使用方法:

from PIL import Image
print get_dominant_color(Image.open('logo.jpg'))

这样就会返回一个rgb颜色,但是这个值是很精确的范围,那我们如何实现百度图片那样的色域呢??

其实方法很简单,r/g/b都是0-255的值,我们只要把这三个值分别划分相等的区间,然后组合,取近似值。例如:划分为0-127,和128-255,然后自由组合,可以出现八种组合,然后从中挑出比较有代表性的颜色即可。

当然我只是举一个例子,你也可以划分的更细,那样显示的颜色就会更准确~~大家赶快试试吧

希望本文所述对大家的python程序设计有所帮助。

Python 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
Python中super函数用法实例分析
Mar 18 Python
python 设置输出图像的像素大小方法
Jul 04 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
Python基于requests实现模拟上传文件
Apr 21 Python
python脚本定时发送邮件
Dec 22 Python
Python实现简单状态框架的方法
Mar 19 #Python
python中日期和时间格式化输出的方法小结
Mar 19 #Python
Python实现抓取城市的PM2.5浓度和排名
Mar 19 #Python
python在windows命令行下输出彩色文字的方法
Mar 19 #Python
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 #Python
python实现颜色rgb和hex相互转换的函数
Mar 19 #Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 #Python
You might like
深入分析php中接口与抽象类的区别
2013/06/08 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
常用一些Javascript判断函数
2012/08/14 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
python select.select模块通信全过程解析
2017/09/20 Python
pyqt5自定义信号实例解析
2018/01/31 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
Python将字典转换为XML的方法
2020/08/01 Python
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
争先创优公开承诺书
2014/08/30 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
化验员岗位职责
2015/02/14 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python