使用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实现ftp客户端示例分享
Feb 17 Python
Python切片工具pillow用法示例
Mar 30 Python
python邮件发送smtplib使用详解
Jun 16 Python
celery4+django2定时任务的实现代码
Dec 23 Python
详解python校验SQL脚本命名规则
Mar 22 Python
Python3 实现串口两进程同时读写
Jun 12 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
python如何写出表白程序
Jun 01 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
python 如何做一个识别率百分百的OCR
May 29 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
php 读取shell管道传输过来的内容
2010/03/01 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
document.getElementById介绍
2011/09/13 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python中查看文件名和文件路径
2017/03/31 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
暇步士官网:Hush Puppies
2016/09/22 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
毕业生精彩的自我评价分享
2013/10/06 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
运动会演讲稿300字
2014/08/25 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏