随笔 - 37  文章 - 0  评论 - 0  阅读 - 18787

python PIL.Image 如何将图像自带的Alpha透明度去除,例如将'RGBA'转为'RGB'

前言

在训练文生图大模型之前,收集训练数据是很重要的一步,

而在网络上获取的很多图片规格不一,给数据的统一处理和导入带来了不少麻烦。

其中有一种特殊情况,就是图像自带透明度(Alpha),通常在文件信息中就会有显示,比如下面这张图:

    

在这种情况下,如果直接用cv2或PIL将它转化为"RGB"模式,会导致得到的图片是纯黑色的。

 

解决办法

如果是由于透明度导致,那么解决的直接思路就是给整张图片加一块同等大小的白色背景

这里用到的函数为:

PIL.Image.alpha_composite()

 

批量处理图片时,还需要加上判断该图片是否包含透明度的逻辑,

代码如下:

复制代码
from PIL import Image
import os
from os.path import join as ospj

src_dir = ''
dst_dir = ''

for f in os.listdir(src_dir):
    src_path = ospj(src_dir, f)
    dst_path = ospj(dst_dir, f)
    if f.endswith('DS_Store'):
        continue
    else:
        img = img = Image.open(src_path)
        # 查看图片是否包含透明度
        if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
            # 准备一张同等尺寸的白色背景
            background = Image.new('RGBA', img.size, (255, 255, 255))
            # 复合原图与背景图
            alpha_composite = Image.alpha_composite(background, img)
            # 将复合后的图片转为"RGB"模式并保存
            alpha_composite = alpha_composite.convert('RGB')
            alpha_composite.save(dst_path)
        else:
            img.save(dst_path)
复制代码

 

 

The End


 

技术之外,欢迎关注我认知成长的公众号 :零度的成长记录

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted on   零度的python武器库  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示