引言
- 近来有将图像白色背景转为透明背景的需求
- 了解到PNG图像一般有四个通道,其中第四个通道Alpha通道就是用来表示透明度的,取值是[0, 255]
0
:表示全透明255
:表示不透明
代码
opencv实现
import cv2
im = cv2.imread('19.png')
height, width, channels = im.shape
new_im = np.ones((height, width, 4)) * 255
new_im[:, :, :3] = im
for i in range(height):
for j in range(width):
if new_im[i, j, :3].tolist() == [255.0, 255.0, 255.0]:
new_im[i, j, :] = np.array([255.0, 255.0, 255.0, 0])
cv2.imwrite('tmp_transparent.png', new_im)
from PIL import Image
def transPNG(srcImageName, dstImageName):
img = Image.open(srcImageName)
img = img.convert("RGBA")
datas = img.getdata()
newData = list()
for item in datas:
if item[0] > 225 and item[1] > 225 and item[2] > 225:
newData.append((255, 255, 255, 0))
else:
newData.append(item)
img.putdata(newData)
img.save(dstImageName, "PNG")