我想使用openCV将PNG和GIF图像转换为JPEG,Alpha通道应转换为白色。有没有办法实现这个目标?
答案 0 :(得分:0)
在RGBA图像中,alpha通道表示背景将如何影响图像。所以你有一个这样的方程式(不是代码):
out = (bg * (1 - alpha)) + (image * alpha)
其中最终图像是图像,图像是我们的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的公式。
答案 1 :(得分:-1)
使用Open CV,您可以以RGB格式打开图像,即,当您执行cv2.imread时,将第二个参数设为1而不是-1。 -1以图像的原始格式打开图像,即保持透明度。将该参数保持为1可以以RGB格式打开它。之后,您可以执行cv2.imwrite来保存RGB图像而不透明。您可以将文件格式称为.jpg