使用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私有属性和方法实例分析
Jan 15 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python机器学习之决策树分类详解
Dec 20 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
好的Python培训机构应该具备哪些条件
May 23 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
python模块常用用法实例详解
Oct 17 Python
Python pip install如何修改默认下载路径
Apr 29 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
Python3中对json格式数据的分析处理
Jan 28 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
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
js代码实现微博导航栏
2015/07/30 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
JavaScript事件列表解说
2006/12/22 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
python多进程操作实例
2014/11/21 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
python实现画圆功能
2018/01/25 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
2014信息公开实施方案
2014/02/22 职场文书
小组名称和口号
2014/06/09 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
回门宴新娘答谢词
2015/09/29 职场文书