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 变量类型及命名规则介绍
Jun 08 Python
深入解析Python中的urllib2模块
Nov 13 Python
python中安装模块包版本冲突问题的解决
May 02 Python
基于Django的python验证码(实例讲解)
Oct 23 Python
Python进程间通信之共享内存详解
Oct 30 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
Python shelve模块实现解析
Aug 28 Python
Python any()函数的使用方法
Oct 28 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 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
推荐文章系统(一)
2006/10/09 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
Python自动抢红包教程详解
2019/06/11 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
python打包生成so文件的实现
2020/10/30 Python
大学生素质拓展活动方案
2014/02/11 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
导游欢迎词范文
2015/01/23 职场文书
幼师中班个人总结
2015/02/12 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js