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

打印 上一主题 下一主题

主题 902|帖子 902|积分 2706

前言
在练习文生图大模型之前,网络练习数据是很重要的一步,
而在网络上获取的许多图片规格不一,给数据的同一处置惩罚和导入带来了不少麻烦。
其中有一种特殊环境,就是图像自带透明度(Alpha),通常在文件信息中就会有显示,好比下面这张图:
    

在这种环境下,如果直接用cv2或PIL将它转化为"RGB"模式,会导致得到的图片是纯玄色的。
 
解决办法
如果是由于透明度导致,那么解决的直接思路就是给整张图片加一块同等大小的白色背景
这里用到的函数为:
  1. PIL.Image.alpha_composite()
复制代码

 
批量处置惩罚图片时,还需要加上判断该图片是否包含透明度的逻辑,
代码如下:
  1. from PIL import Image
  2. import os
  3. from os.path import join as ospj
  4. src_dir = ''
  5. dst_dir = ''
  6. for f in os.listdir(src_dir):
  7.     src_path = ospj(src_dir, f)
  8.     dst_path = ospj(dst_dir, f)
  9.     if f.endswith('DS_Store'):
  10.         continue
  11.     else:
  12.         img = img = Image.open(src_path)
  13.         # 查看图片是否包含透明度
  14.         if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
  15.             # 准备一张同等尺寸的白色背景
  16.             background = Image.new('RGBA', img.size, (255, 255, 255))
  17.             # 复合原图与背景图
  18.             alpha_composite = Image.alpha_composite(background, img)
  19.             # 将复合后的图片转为"RGB"模式并保存
  20.             alpha_composite = alpha_composite.convert('RGB')
  21.             alpha_composite.save(dst_path)
  22.         else:
  23.             img.save(dst_path)
复制代码
 
 
The End
 
技能之外,接待关注我认知成长的公众号 :零度的成长记录
 
                      
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表