咪哥杂谈
本篇的阅读时间约为6分钟。
1
前言
上周,我分享了脸部识别的Python库。 今天继续说我上次在评论区留言的后续吧。
既然是追赶热点的需求,想想这几年发生了身边的热点事件。
我们来简单整理一下。 从我毕业到今年我感受到的热点事件。
2017年圣诞节,微信头像戴着圣诞帽子。
2019年国庆节,微信头像,给我一面国旗。
2020年初肺炎,微信头像,共同抗疫,带上口罩。
不,微信作为目前主流的社交平台,每年伴随热点的总会都与头像有关。
虚拟形象是什么? 虚拟形象可以代表社交网络上的人脸。 一小撮人玩的话,后面就像雪人一样人会增加。
因此,在最近文章中,以制作头像模板、或图像模板为中心,尝试写下相关的实现技术。 等待下一个流量到来,直接设置模板,做服务就可以了。
上周写了图像人脸识别基础的应用,怎么实现模板? 或者如何改变提问方式,将热点应用于用户的原始图像?
那一定需要把热点图像的背景变成透明色,覆盖在原始图像上。 在这里,我对今天文章的标题提出了问题。 ) )
今天首先介绍把图像的背景色转换成透明色的方法。 以下开始正文。
2
环境准备
开始之前,请参阅本文的第四部分
图学小知识,不看后悔100%有用!
看完之后,你就明白了我们平时说的RGB的意思,之后就好说了。
接下来,您只需遵循pillow库。
pip install pillow 3
代码部分
没有几行代码,但需要理解。
frompilimportimagedeftransparent _ back (: img=image.open ) ' old.png ' )图像将转换为四个通道。 第四个通道是我们修正的透明度。 返回新对象img=img.convert'rgba'#以获取图像的像素大小width。 height=img.size pixel _ data=img.load (forhinrange ) height ) :forwinrange(width ) : pixel=pixel_data[w h 的四个通道中,如果颜色值大于浅灰色,则像素点为透明块IFR 220 andg 220 andg 220 andb 220 anda 2203360 pixel 255,0 ) img.save('new.png ) )新图像
open打开本地图像,用convert法将图像转换为R/G/B/A。
>(RGBA是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha的色彩空间)
这里的 A,代表透明度的意思,尽管它英文本意 alpha 没有透明度的意思。感兴趣的可以看下知乎的这篇文章。
https://zhuanlan.zhihu.com/p/24415265
接下来,获取图片的每个像素点的这个通道值,如果此时的色彩值亮于220这个数值,则将该像素点块的 alpha 通道置为透明。
来直观的看下 221 数值的颜色(灰色):
255呢(纯白色)?
这意味着,在我的这段代码中,只有现代的小霸王原图片的背景色,需要在这之间的色差值,才能被变为透明图片,而恰好,我们大多数图片背景都是偏白色,所以,如果现代的小霸王背景为深黑色系,那么,需要将这段代码的数值修改下。
4
结果展示
以下面的眼镜举例,这是一张白底为底色的眼睛:
找了一张最近B站重做的《头文字D》中zgdgb图片:
假如你没有将眼镜的图片背景透明化,那么贴上去图片最终成像:
如果眼镜背景透明化了,那么贴上去的图片则是这样的:
至于如何将眼睛用技术手段覆盖在zgdgb眼睛上,将在下一篇中介绍。
5
总结
图片透明化,如果做设计的或者个人网站时候,经常会用到,有些网站在设计 logo 时,logo的图片背景透明化,才能完美符合网站的底层色彩去呈现,类似抖音官网的这样:
好啦,本篇内容就到这里,如果你有什么想说的,欢迎评论区留言。
一句很鸡汤的话送给大家:“机会往往是留给有准备的人”。有些东西,看到了,可以提前布局,静静地等待"热潮"的到来。
PS:本篇代码很简短,就不上传到 github 了。
题图 上海夜景 - pexels - Manuel Joseph
▼
往期精彩回顾
▼
模拟恐怖片里的"跳字特效"
用Python鬼畜落寞的红牛照片,了解下?