本帖最后由 ~零度 于 2024-1-27 09:18 编辑
opencv显示的图像是正确的,原图是存在透明色的,有一些软件会把透明色显示为白色,所以原图看起来是白色背景,有一些软件会把透明色显示为黑色,所以opencv显示出来是黑色背景的。想要让它显示为白色,需要将原图中的透明像素替换为白色像素。具体操作如下:
[Asm] 纯文本查看 复制代码 import cv2
import numpy as np
# 读取PNG图片,包括透明通道
image = cv2.imread('xx.png', cv2.IMREAD_UNCHANGED)
# 判断图片的通道数,如果为小于4则没有透明度通道,如果为4则有透明度通道
if image.shape[2] == 4:
alpha = image[:, :, 3] / 255.0 # 透明通道,值越小透明度越大
background = np.ones(image.shape[:2], dtype=np.uint8) * 255 * (1 - alpha) # 计算背景,透明部分像素值为0,不透明部分像素值为255
image[:, :, 0] = background + image[:, :, 0] * alpha # 背景和前景叠加
image[:, :, 1] = background + image[:, :, 1] * alpha
image[:, :, 2] = background + image[:, :, 2] * alpha
image = image[:, :, :3].astype(np.uint8) # 去除透明通道,并转换数据类型
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
|