Python通过PIL获取图片主要颜色并和颜色库进行对比的方法


Posted in Python onMarch 19, 2015

本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法。分享给大家供大家参考。具体分析如下:

这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照颜色搜索了。

在使用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,然后自由组合,可以出现八种组合,然后从中挑出比较有代表性的颜色即可。

当然我只是举一个例子,你也可以划分的更细,那样显示的颜色就会更准确~~大家赶快试试吧

希望本文所述对大家的python程序设计有所帮助。

Python 相关文章推荐
Python基类函数的重载与调用实例分析
Jan 12 Python
python实现红包裂变算法
Feb 16 Python
python实现识别相似图片小结
Feb 22 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
Python print不能立即打印的解决方式
Feb 19 Python
Python之字典对象的几种创建方法
Sep 30 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 Python
Python 发送SMTP邮件的简单教程
Jun 24 Python
Python实现简单状态框架的方法
Mar 19 #Python
python中日期和时间格式化输出的方法小结
Mar 19 #Python
Python实现抓取城市的PM2.5浓度和排名
Mar 19 #Python
python在windows命令行下输出彩色文字的方法
Mar 19 #Python
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 #Python
python实现颜色rgb和hex相互转换的函数
Mar 19 #Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 #Python
You might like
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
Python中列表(list)操作方法汇总
2014/08/18 Python
Python制作简易注册登录系统
2016/12/15 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
python的re模块使用方法详解
2019/07/26 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
python异步Web框架sanic的实现
2020/04/27 Python
Python接口测试文件上传实例解析
2020/05/22 Python
序列化Python对象的方法
2020/08/01 Python
python pip如何手动安装二进制包
2020/09/30 Python
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
应届电子商务毕业自荐书范文
2014/02/11 职场文书
情人节活动策划方案
2014/02/27 职场文书
岗位明星事迹材料
2014/05/18 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
个人投资合作协议书
2014/10/12 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
亮剑观后感300字
2015/06/05 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python