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 相关文章推荐
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
简单实现python聊天程序
Apr 01 Python
TensorFlow实现Logistic回归
Sep 07 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
python基础教程之while循环
Aug 14 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
python退出循环的方法
Jun 18 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
python pillow库的基础使用教程
Jan 13 Python
Python批量将csv文件转化成xml文件的实例
May 10 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
JS回调函数深入理解
2019/10/16 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
Python的gevent框架的入门教程
2015/04/29 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
教师自我评价范例
2013/09/24 职场文书
会计学个人自荐信模板
2013/12/13 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
xxx同志考察材料
2014/02/07 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
教师个人师德总结
2015/02/06 职场文书
网络管理员岗位职责
2015/02/12 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
Linux中如何安装并部署Redis
2022/04/18 Servers