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多进程操作实例
Nov 21 Python
Python简单进程锁代码实例
Apr 27 Python
Python 登录网站详解及实例
Apr 11 Python
python字符串常用方法
Jun 14 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
python 基于pygame实现俄罗斯方块
Mar 02 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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
PHP 5.3.0 安装分析心得
2009/08/07 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
常用js脚本
2006/12/03 Javascript
JavaScript基本对象
2007/01/11 Javascript
修改发贴的编辑功能
2007/03/07 Javascript
Use Word to Search for Files
2007/06/15 Javascript
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
深入浅析Python的类
2018/06/22 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Python模块相关知识点小结
2020/03/09 Python
如何解决安装python3.6.1失败
2020/07/01 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
租赁协议书范本
2014/04/22 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
2014年手术室工作总结
2014/11/26 职场文书
学校捐书倡议书
2015/04/27 职场文书
老人与海读书笔记
2015/06/26 职场文书
基于Python编写一个监控CPU的应用系统
2022/06/25 Python