python 我无法用OpenCV在透明图像上放置白色背景

wkyowqbh  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(173)

我是OpenCV新手,需要在透明图像上放置白色背景来进行操作
我的透明图像是全黑的,就像下面的例子:black "rectangle"
为了能够放置白色背景,我使用numpy创建了一个写入图像,与透明图像的尺寸相同:

img1 = cv.imread("rectangle.png", cv.IMREAD_ANYCOLOR)
arrayImg1 = np.asarray(img1)

rows, columns = arrayImg1.shape[:2]
print(f'Columns: {columns}')
print(f'Lines: {lines}')

writeImg = np.ones((rows, columns, 3)) * 255

但是当我合并图像时,黑色部分不会出现在白色部分之上
我尝试使用“cv2.add()”方法来连接图像,但这并没有解决我的问题,而且我不知道还有其他方法可以做到这一点

jogvjijk

jogvjijk1#

OpenCV图像已经是Numpy数组了。所以你不需要使用asarray来转换。把alpha通道和BGR通道从img1中分离出来。然后使用alpha通道作为Numpy的遮罩来改变alpha通道的颜色。

import cv2
import numpy as np

img1 = cv2.imread("rectangle.png", cv2.IMREAD_UNCHANGED)
bgr = img1[:,:,0-3]
print(bgr.shape)
alpha = img1[:,:,3]
print(alpha.shape, np.amin(alpha), np.amax(alpha))
result = bgr.copy()
result[alpha==0] = 255

cv2.imwrite('rectangle_white.png', result)

cv2.imshow('bgr', bgr)
cv2.imshow('alpha', alpha)
cv2.waitKey(0)

原来你的图像是单通道的阿尔法而不是3通道的阿尔法。所以在年底分配的颜色应该只是255而不是(255,255,255)。见打印结果的终端从上面。

相关问题