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格式化字符串实例总结
Sep 28 Python
win10系统中安装scrapy-1.1
Jul 03 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python的pip安装以及使用教程
Sep 18 Python
Python3多线程基础知识点
Feb 19 Python
一文了解Python并发编程的工程实现方法
May 31 Python
Django基础知识 web框架的本质详解
Jul 18 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 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
如何给phpadmin一个保护
2006/10/09 PHP
基于文本的留言簿
2006/10/09 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
js实现录音上传功能
2019/11/22 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
C语言中break与continue的区别
2012/07/12 面试题
一套软件测试笔试题
2014/07/25 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
生产副总岗位职责
2013/11/28 职场文书
企业文化演讲稿
2014/05/20 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
经典团队口号大全
2014/06/21 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
五好家庭申报材料
2014/12/20 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python
Python实现抖音热搜定时爬取功能
2022/03/16 Python