前言
在练习文生图大模型之前,网络练习数据是很重要的一步,
而在网络上获取的许多图片规格不一,给数据的同一处置惩罚和导入带来了不少麻烦。
其中有一种特殊环境,就是图像自带透明度(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
技能之外,接待关注我认知成长的公众号 :零度的成长记录
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |