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处理PDF的方法
Nov 10 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
python发送告警邮件脚本
Sep 17 Python
基于Python的PIL库学习详解
May 10 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
DRF框架API版本管理实现方法解析
Aug 21 Python
Python 多进程原理及实现
Dec 21 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数组
2006/10/09 PHP
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
图解Python变量与赋值
2018/04/03 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
Python利用命名空间解析XML文档
2020/08/10 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
社区母亲节活动方案
2014/03/05 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
信息技术研修心得体会
2016/01/08 职场文书
python 标准库原理与用法详解之os.path篇
2021/10/24 Python