python设置图像透明度

jpg 图像读进来是 RGB 三阶张量,要设置透明度,可以手动加一层 alpha 通道,改成 RGBA 四阶,再用 PIL.Image 转成 png 保存。alpha 通道 [0, 255] 取值, 0 是完全透明,255 是透明。

Example

  • 网上下的一张 jpg 图,想将白色背景设为透明,存成 png。
    jpg
  • 先用取色器确定白色背景部分的 RGB 值,本例 R = G = B = 255。
import numpy as np
import cv2
from PIL import Image


img = cv2.cvtColor(cv2.imread("animal-horse.jpg"), cv2.COLOR_BGR2RGB)
print(img.shape, img.dtype)  # (1200, 1600, 3) uint8
# 找白色背景部分
mask = (255 == img[:, :, 0]) & (255 == img[:, :, 1]) & (255 == img[:, :, 2])
# 计算 alpha 通道:反选前景并设为 255 不透明
# 转成 uint8,与原 RGB 的类型一致
alpha = (1 - mask.astype(np.uint8)) * 255
# 升维、拼接:RGB -> RGBA
img_rgba = np.concatenate((img, alpha[:, :, np.newaxis]), 2)
# 转成 PIL.Image
img_rgba = Image.fromarray(img_rgba)
# 保存
img_rgba.save("animal-horse.png")
  • 效果(浏览器用 dark reader 将背景弄黑看透明效果,或下到本地用 power point 叠在另一幅图上面看)
    png

Greyscale

用 PIL 读写灰度图,存为 .png 格式,参考 [2],opencv 版见 [3]。

import numpy as np
from PIL import Image

img = np.tile(np.arange(256)[np.newaxis, :], (10, 1)).astype(np.uint8)
print(img.shape) # (10, 256)
img_pil = Image.fromarray(img, 'L')
img_pil.save("grey-pil.png")
im1 = np.asarray(Image.open("grey-pil.png"))
print(im1.shape, im1.dtype) # (10, 256) uint8
print("diff:", (img != im1).sum()) # 0

grey-pil

References

  1. 优快云去除水印最新方法(创作中心 -> 博客设置 -> 图片水印)
  2. Converting 2D Numpy array of grayscale values to a PIL image
  3. opencv读写png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值