首先理解图片的构成
一张图片可以理解为由 m x n 个像素组成的。
一个像素又有很多种表现形式。
比如:
- RGB
- RGB + Alpha
- GRAY
- 其他
RGB
每一个像素由 24 位组成,
用10进制表示 [255(R) 255(G) 255(B)] (白色)
一张 mxn 的图片就是一个 3维数组
[
[[255 255 255] [255 255 255] ... ... ... n列]
[[255 255 255] [255 255 255] ... ... ... ...]
... ... ...
m 行
]
RGB + Alpha
Alpha 通道即图片透明度。
一张 mxn 的图片也是一个 3维数组
第3维多了一个alpha 通道, 1(255)不透明,0(0)全透明
[
[[255 255 255 255] [255 255 255 255] ... ... ... n列]
[[255 255 255 255] [255 255 255 255] ... ... ... ...]
... ... ...
m 行
]
GRAY
灰度图每一个像素 8 位
一张 mxn 的图片是一个 2 维数组
[
[255 255 255 ... ... ... n列]
[255 255 255 ... ... ... ...]
... ... ...
m 行
]
制作透明图片
基于以上原理,我们可以制作透明图片
import numpy as np
import cv2
# 带alpha通道读入原始图片
img = cv2.imread('alpha.png', cv2.IMREAD_UNCHANGED)
# 将黑色不透明的像素改成黑色透明
img[np.all(img == [0,0,0,255],axis=2)] = [0,0,0,0]
# 保存
cv2.imwrite('transparent.png',img)
原始图片.PNG
黑色背景透明.png
灰度图.png
网友评论