使用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用10行代码实现对黄色图片的检测功能
Aug 10 Python
Python数组定义方法
Apr 13 Python
Python3 replace()函数使用方法
Mar 19 Python
python监控进程脚本
Apr 12 Python
python实现电脑自动关机
Jun 20 Python
Python 修改列表中的元素方法
Jun 26 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python重要函数eval多种用法解析
Jan 14 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 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
我的论坛源代码(三)
2006/10/09 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php静态文件生成类实例分析
2015/01/03 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
跟老齐学Python之类的细节
2014/10/13 Python
跟老齐学Python之Import 模块
2014/10/13 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
Pycharm Git 设置方法
2020/09/15 Python
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
历史系自荐信范文
2013/12/24 职场文书
四议两公开实施方案
2014/03/28 职场文书
青年标兵事迹材料
2014/08/16 职场文书
学校四风对照检查材料
2014/08/28 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
看雷锋电影观后感
2015/06/10 职场文书
DSP接收机前端设想
2022/04/05 无线电
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers