使用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中for语句简单遍历数据的方法
May 07 Python
Python基于有道实现英汉字典功能
Jul 25 Python
详解Python迭代和迭代器
Mar 28 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
python采集微信公众号文章
Dec 20 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
python 消费 kafka 数据教程
Dec 21 Python
Python @property装饰器原理解析
Jan 22 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
python 实现一个简单的线性回归案例
Dec 17 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 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 中的批处理的实现
2007/06/14 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
python写入已存在的excel数据实例
2018/05/03 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
用python制作个视频下载器
2021/02/01 Python
悦木之源美国官网:Origins美国
2016/08/01 全球购物
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
最受欢迎的自我评价
2013/12/22 职场文书
公司成立感言
2014/01/11 职场文书
农民致富事迹材料
2014/01/23 职场文书
大学运动会通讯稿
2014/01/28 职场文书
工作会议方案
2014/05/21 职场文书
文明生主要事迹
2014/05/25 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
导游词之桂林
2019/08/20 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL