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 相关文章推荐
Python代码解决RenderView窗口not found问题
Aug 28 Python
Python创建xml文件示例
Mar 22 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
python 画图 图例自由定义方式
Apr 17 Python
django orm模块中的 is_delete用法
May 20 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
php 生成短网址原理及代码
2014/01/23 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
php中的登陆login实例代码
2016/06/20 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
python同步windows和linux文件
2019/08/29 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
python异步Web框架sanic的实现
2020/04/27 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
英语专业推荐信
2013/11/16 职场文书
人事专员岗位职责
2013/11/20 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL