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 strip lstrip rstrip使用方法
Sep 06 Python
Python将xml和xsl转换为html的方法
Mar 10 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
解决python3 pika之连接断开的问题
Dec 18 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
python 公共方法汇总解析
Sep 16 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
利用python对mysql表做全局模糊搜索并分页实例
Jul 12 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 Python
python pyhs2 的安装操作
Apr 07 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 无限级分类 获取顶级分类ID
2016/03/13 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
javascript比较文档位置
2008/04/08 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Vue表单实例代码
2016/09/05 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python3 pygame实现接小球游戏
2019/05/14 Python
django 外键创建注意事项说明
2020/05/20 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
五四青年节活动总结
2015/02/10 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
高中物理教学反思
2016/02/19 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python