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实现递归版汉诺塔示例(汉诺塔递归算法)
Apr 08 Python
Python3里的super()和__class__使用介绍
Apr 23 Python
Python中查看文件名和文件路径
Mar 31 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
python实现的分层随机抽样案例
Feb 25 Python
python自定义函数def的应用详解
Jun 03 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
python 装饰器的基本使用
Jan 13 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 中文和编码判断代码
2010/05/16 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
Vue自定义指令写法与个人理解
2019/02/09 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Python sys.argv用法实例
2015/05/28 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
干部下基层实施方案
2014/03/14 职场文书
党员大会主持词
2014/04/02 职场文书
班级口号大全
2014/06/09 职场文书
逃课检讨书
2015/01/26 职场文书
导游词之丽江普济寺
2019/10/22 职场文书