繁体   English   中英

如何使用opencv python将图像的alpha通道转换为白色?

[英]how to convert alpha channel of the image to white color using opencv python?

我想使用 openCV 将 PNG 和 GIF 图像转换为 JPEG,应该将 alpha 通道转换为白色。 有什么办法可以做到这一点吗?

使用 Open CV,您可以打开 RGB 格式的图像,即,当您执行 cv2.imread 时,将第二个参数设为 1 而不是 -1。 -1 以任何图像的原始格式打开图像,即它会保留透明度。 将该参数保持为 1,您可以以 RGB 格式打开它。 之后,您可以执行 cv2.imwrite 来保存没有透明度的 RGB 图像。 您可以提及文件格式为 .jpg

在 RGBA 图像中,alpha 通道表示背景对图像的影响。 所以你有一个这样的方程(不是代码):

out = (bg * (1 - alpha)) + (image * alpha)

其中 out 是最终图像,图像是我们 RGBA 图像的 R、G 和 B 通道,bg 是背景图像。 这里我们有 0 <= alpha <= 1。

对于您的情况,您希望您的背景是平面白色图像,因此从这一点上计算非常简单。 你可以这样做:

B, G, R, A = cv2.split(image)
alpha = A / 255

R = (255 * (1 - alpha) + R * alpha).astype(np.uint8)
G = (255 * (1 - alpha) + G * alpha).astype(np.uint8)
B = (255 * (1 - alpha) + B * alpha).astype(np.uint8)

image = cv2.merge((B, G, R))

如果你不喜欢这种拆分和合并的东西(像我一样),你可以使用这个实现:

bg = np.array([255, 255, 255])
alpha = (image[:, :, 3] / 255).reshape(image.shape[:2] + (1,))
image = ((bg * (1 - alpha)) + (image[:, :, :3] * alpha)).astype(np.uint8)

在第一行我制作背景图像,在第二行我计算 0 和 1 之间的 alpha 值并将其重塑以使其成为 3-D 数组(乘法需要),最后一行是 alpha 的公式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM