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中List的sort方法指南
Sep 01 Python
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python 数据的清理行为实例详解
Jul 12 Python
python实现微信远程控制电脑
Feb 22 Python
python实现百度语音识别api
Apr 10 Python
opencv与numpy的图像基本操作
Mar 08 Python
学习python分支结构
May 17 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 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
2014/10/30 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
Yii配置文件用法详解
2014/12/04 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
jQuery代码优化 遍历篇
2011/11/01 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
nodejs基础知识
2017/02/03 NodeJs
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
Angular父组件调用子组件的方法
2018/04/02 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
Vue实现table上下移动功能示例
2019/02/21 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
解读Python编程中的命名空间与作用域
2015/10/16 Python
Django实现快速分页的方法实例
2017/10/22 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
python使用Matplotlib画饼图
2018/09/25 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
PHP经典面试题
2016/09/03 面试题
武汉某公司的C#笔试题面试题
2015/12/25 面试题
珠宝的促销活动方案
2014/08/31 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
法定授权委托证明书
2014/09/27 职场文书
公司人事任命通知
2015/04/20 职场文书