栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Opencv PNG抠图

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Opencv PNG抠图

我们平时接触的最多的图片格式除了jpg,还有一种就是带透明通道的png图。png这种带透明通道的图像因为有透明度,因此,它可以方便的和背景图像进行叠加和组合。

彩色的jpg图像是RGB三通道,而png是ARGB四通道(A就是Alpha,图像处理这块叫透明度)。在opencv中,png也是点阵数据,每个位置在内存中排列为BGRA。

比如下面一张png图像,位深是32,也就是说每个位置是4个字节。我们这个图像虽然是png的,但是现在它的透明通道都是255,所以我们可以清楚看到背景不是空的,而是白色。让我们通过代码把它的白色背景扣掉吧。

代码其实比较简单了,因为这个图颜色比较纯。就是遍历每个位置,然后判断这个位置如果RGB值都是255,就是白色,我们就把这个位置的Alpha通道设置为0,就是全透明了。

需要注意的是opencv读取图像默认会变成RGB图,所以imread函数第二个参数需要传值IMREAD_UNCHANGED,让它读图时保持原有图像的类型(同理加载单通道灰度图也得设置)。

处理保存后我们可以看到,是不是背景透明了。

Alpha通道是有透明度的,所以我们可以再设置下这个图的红色部分,让它变成半透明。

把前面的代码略加改造,多一个红色区域的判断,然后把对应位置的Alpha通道设置成125(256的一半,所以是半透明,也就是透明度50%)。

之前文章我也用过这个图。。因为红色不够红,所以它这块大部分红色通道值是254,不是255。。。。

整完后效果就是这样了:

这个放在这里图比较小,对比不够真切,我们可以用Photoshop打开对比看的更清楚。

把3.png作为上面图层,叠加到另外一个图像,就是那种经常说的图像合成了。

当然这个原图因为颜色不纯。我这个是写代码单纯判断一个颜色,都没有做阈值范围,所以抠图稀烂。。。我就是从代码技术分析下原理,大家不要在意这个图放上去的细节。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号