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 相关文章推荐
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
Django自定义认证方式用法示例
Jun 23 Python
用Python写一段用户登录的程序代码
Apr 22 Python
python实现周期方波信号频谱图
Jul 21 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
django自带调试服务器的使用详解
Aug 29 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
在Python 中将类对象序列化为JSON
Apr 06 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之readdir函数用法实例
2014/11/13 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
改进Django中的表单的简单方法
2015/07/17 Python
python实现单向链表详解
2018/02/08 Python
python3转换code128条形码的方法
2019/04/17 Python
机器学习实战之knn算法pandas
2019/06/22 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Python实现仿射密码的思路详解
2020/04/23 Python
python计算auc的方法
2020/09/09 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
abstract是什么意思
2012/02/12 面试题
建筑结构施工求职信
2014/07/11 职场文书
体育专业求职信
2014/07/16 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
房屋转让协议书
2014/10/18 职场文书
圣诞晚会主持词
2015/07/01 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
浅谈MySQL之select优化方案
2021/08/07 MySQL
python 详解turtle画爱心代码
2022/02/15 Python