使用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 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
关于python列表增加元素的三种操作方法
Aug 22 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
python实现关闭第三方窗口的方法
Jun 28 Python
django将数组传递给前台模板的方法
Aug 06 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
python如何保存文本文件
Jun 07 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
Python+Appium自动化测试的实战
Jun 30 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
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
JS实现简易计算器
2020/02/14 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
Python 常用string函数详解
2016/05/30 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
Android面试题附答案
2014/12/08 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
高中学生期末评语
2014/04/25 职场文书
信息技术课后反思
2014/04/27 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫