使用Python的PIL模块来进行图片对比
在使用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,然后自由组
合,可以出现八种组合,然后从中挑出比较有代表性的颜色即可。
当然我只是举一个例子,你也可以划分的更细,那样显示的颜色就会更准确~~大家赶快试试吧
PS:通过pil生成缩略图的简单代码
如果是单纯地生成缩略图,我们可以通过pil很简单地办到,这段代码会强行将图片大小修改成250x156:
from PIL import Image
img = Image.open('sharejs.jpg')
img = img.resize((250, 156), Image.ANTIALIAS)
img.save('sharejs_small.jpg')
使用Python的PIL模块来进行图片对比的更多相关文章
- 基于PIL模块创建验证码图片
def get_valid_img(request): # 方式2:基于PIL模块创建验证码图片 from PIL import Image, ImageDraw, ImageFont from io ...
- Python使用PIL模块生成随机验证码
PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...
- python 利用PIL库进行更改图片大小的操作
python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...
- python中PIL模块
Image模块 Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内.如open.save.conver.show-等功能. open类 Image ...
- 【Python】PIL模块
Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...
- python 使用 PIL 和 matplotlib 获取图片像素点处理之后再写入
python 版本 3.x 首先安装 PIL 由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又 ...
- Python利用PIL生成随机验证码图片
安装pillow: pip install pillow PIL中的Image等模块提供了创建图片,制作图片的功能,大致的步骤就是我们利用random生成6个随机字符串,然后利用PIL将字符串绘制城图 ...
- python之PIL模块基础功能
Image主要是打开图片后,对图片进行编辑,主要有以下一些常用功能: 1.读取并显示图片: from PIL import Image img = Image.open("H:\\salar ...
- python的PIL模块安装
一.Centos安装PIL #尤其重要,否则会报错 yum install python-devel yum install libjpeg libjpeg-devel zlib zlib-devel ...
随机推荐
- 安装loadrunner11的时候提示'命令行选项语法错误。键入命令 / ?’ 怎么办
重启电脑后再安装.若还是不行就运行安装程序自带的vcredist_x86.exe,在我电脑的安装包的目录是loadrunner-11\lrunner\Kor\prerequisites\vc2005_ ...
- LeetCode #1021. Remove Outermost Parentheses 删除最外层的括号
https://leetcode-cn.com/problems/remove-outermost-parentheses/ Java Solution class Solution { public ...
- Codeforces 1061C (DP+滚动数组)
题面 传送门 分析 考虑DP 设\(dp[i][j]\)表示前i个数选出的序列长度为j的方案数 状态转移方程为: \[ dp[i][j]= \begin{cases}dp\left[ i-1\righ ...
- /dev/random vs /dev/urandom
If you want random data in a Linux/Unix type OS, the standard way to do so is to use /dev/random or ...
- CSS3中resize属性
说明: resize属性是指定一个元素是否可由用户调整大小的. 语法: resize:none | both | horizontal | vertical none:用户不可一调整元素的尺寸(默认值 ...
- ES6 的基础教程
一.介绍 1.历史 ECMAScript和JavaScript ECMA是标准,JS是实现 类似于HTML5是标准,IE10.Chrome.FF都是实现 换句话说,将来也能有其他XXXScript来实 ...
- ActiveMQ修改连接的用户名密码
安装目录下conf/activemq.xml 添加如下内容: <plugins> <simpleAuthenticationPlugin> <users> < ...
- python正则表达式 re (二)sub
背景: re.sub是re模块重要的组成部分,并且功能也非常强大,主要功能实现正则的替换. re.sub定义: sub(pattern, repl, string, count=0, flags=0) ...
- hdu1210Eddy's 洗牌问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1210 Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如 ...
- Go 使用切片
1.使用切片字面量来声明切片 // 创建一个整型切片 // 其容量和长度都是 5 个元素 slice := [], , , , } // 改变索引为 1 的元素的值 slice[] = 2.使用切片创 ...