admin管理员组

文章数量:817299

python设置图像透明度

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

Example

  • 网上下的一张 jpg 图,想将白色背景设为透明,存成 png。
  • 先用取色器确定白色背景部分的 RGB 值,本例 R = G = B = 255。
import numpy as np
import cv2
from PIL import Imageimg = 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 叠在另一幅图上面看)

References

  1. CSDN去除水印最新方法(创作中心 -> 博客设置 -> 图片水印)

本文标签: python设置图像透明度