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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python环境下搭建属于自己的pip源的教程
May 05 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
python制作简单五子棋游戏
Jun 18 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
小 200 行 Python 代码制作一个换脸程序
May 12 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
python3 hdf5文件 遍历代码
May 19 Python
python基础之类属性和实例属性
Oct 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
人族 Terran 基本策略
2020/03/14 星际争霸
php 时间计算问题小结
2009/01/04 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
python 魔法函数实例及解析
2019/09/25 Python
python已协程方式处理任务实现过程
2019/12/27 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
实习教师自我鉴定
2013/12/12 职场文书
自荐书范文范例
2014/02/13 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
个人承诺书格式范文
2015/04/29 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
Redis RDB技术底层原理详解
2021/09/04 Redis