使用OpenCV为png设置白色背景,而不是透明度

ekn*_*brk 2 opencv numpy image python-3.x

我也有一个OpenCv映像。

opencvImage = cv2.cvtColor(numpy_image, cv2.COLOR_RGBA2BGRA)
Run Code Online (Sandbox Code Playgroud)

然后,使用以下代码段,我想删除透明度并设置白色背景。

source_img = cv2.cvtColor(opencvImage[:, :, :3], cv2.COLOR_BGRA2GRAY)
source_mask = opencvImage[:,:,3]  * (1 / 255.0)

background_mask = 1.0 - source_mask

bg_part = (background_color * (1 / 255.0)) * (background_mask)
source_part = (source_img * (1 / 255.0)) * (source_mask)

result_image = np.uint8(cv2.addWeighted(bg_part, 255.0, source_part, 255.0, 0.0))
Run Code Online (Sandbox Code Playgroud)

实际上,我可以将背景设置为白色,但是实际的图像颜色也有所变化。我相信COLOR_BGRA2GRAY方法会导致此问题。因此,我尝试使用IMREAD_UNCHANGED方法,但出现此错误:函数'cvtColor'中不支持的颜色转换代码

顺便说一句,我对任何解决方案都持开放态度,我只分享我的代码-可能需要一个小的修复。

use*_*942 6

这是一个基本脚本,它将用白色替换所有完全透明的像素,然后删除Alpha通道。

import cv2
#load image with alpha channel.  use IMREAD_UNCHANGED to ensure loading of alpha channel
image = cv2.imread('your image', cv2.IMREAD_UNCHANGED)    

#make mask of where the transparent bits are
trans_mask = image[:,:,3] == 0

#replace areas of transparency with white and not transparent
image[trans_mask] = [255, 255, 255, 255]

#new image without alpha channel...
new_img = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR)
Run Code Online (Sandbox Code Playgroud)