使用Python的PIL模块来进行图片对比


Posted in Python onFebruary 18, 2016

在使用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,然后自由组 合,可以出现八种组合,然后从中挑出比较有代表性的颜色即可。
当然我只是举一个例子,你也可以划分的更细,那样显示的颜色就会更准确~~大家赶快试试吧

PS:通过pil生成缩略图的简单代码

如果是单纯地生成缩略图,我们可以通过pil很简单地办到,这段代码会强行将图片大小修改成250x156:

from PIL import Image
img = Image.open('sharejs.jpg')
img = img.resize((250, 156), Image.ANTIALIAS)
img.save('sharejs_small.jpg')
Python 相关文章推荐
浅谈Python程序与C++程序的联合使用
Apr 07 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python基于pygame实现的font游戏字体(附源码)
Nov 11 Python
Python人脸识别初探
Dec 21 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python set集合使用方法解析
Nov 05 Python
python实现堆排序的实例讲解
Feb 21 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 Python
python自动化办公操作PPT的实现
Feb 05 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 #Python
python装饰器与递归算法详解
Feb 18 #Python
Python利用Nagios增加微信报警通知的功能
Feb 18 #Python
Python多线程、异步+多进程爬虫实现代码
Feb 17 #Python
玩转python爬虫之爬取糗事百科段子
Feb 17 #Python
玩转python爬虫之正则表达式
Feb 17 #Python
玩转python爬虫之URLError异常处理
Feb 17 #Python
You might like
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
Yii中表单用法实例详解
2016/01/05 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
css配合jquery美化 select
2013/11/29 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
webpack项目轻松混用css module的方法
2018/06/12 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
Python中type的构造函数参数含义说明
2015/06/21 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
python 实现简易的记事本
2020/11/30 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
公民授权委托书范本
2014/09/17 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
java泛型通配符详解
2021/07/25 Java/Android
Python OpenCV超详细讲解基本功能
2022/04/02 Python
R9700摩机记
2022/04/05 无线电
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技