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 2025-03-03 19:59  零度的python武器库  阅读(192)  评论(0)    收藏  举报