簡體   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