Ank*_*Ank 1 python opencv image-processing opacity
在下面给出的程序中,我将 alpha 通道添加到 3 通道图像以控制其不透明度。但是无论我给的 alpha 通道的值是多少,对图像都没有影响!任何人都可以解释我为什么?
import numpy as np
import cv2
image = cv2.imread('image.jpg')
print image
b_channel,g_channel,r_channel = cv2.split(image)
a_channel = np.ones(b_channel.shape, dtype=b_channel.dtype)*10
image = cv2.merge((b_channel,g_channel,r_channel,a_channel))
print image
cv2.imshow('img',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我可以在终端中看到添加了 alpha 通道并且它的值随着我在程序中的更改而变化,但对图像本身的不透明度没有影响!
我是 OpenCV 的新手,所以我可能会遗漏一些简单的东西。感谢帮助!
Alpha 是用于控制图像不透明度的通道。除非您对其执行操作,否则 Alpha 通道通常不会执行任何操作。它本身不会使图像透明。
Alpha 通常用于移除图像中不重要的区域或将一个图像与另一个图像组合。在第一种情况下,图像通常只是简单地乘以它的 alpha。这有时称为预乘。在这种情况下,Alpha 通道的暗区使 RGB 变暗,而亮区则保持 RGB 不变。
R = R*A
G = G*A
B = B*A
Run Code Online (Sandbox Code Playgroud)
这是您的代码版本,可以满足您的需求(注意 - 我转换为 32 位,因为当 alpha 通道的范围从 0 到 1 时更容易使用):
import numpy as np
import cv2
i = cv2.imread('image.jpg')
img = np.array(i, dtype=np.float)
img /= 255.0
cv2.imshow('img',img)
cv2.waitKey(0)
#pre-multiplication
a_channel = np.ones(img.shape, dtype=np.float)/2.0
image = img*a_channel
cv2.imshow('img',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
第二种情况用于尝试将图像覆盖在另一个图像上。这是一种合成操作,通常称为“过度”合并或“混合”合并。在这种情况下,有前景图像“A”和背景图像“B”以及可以包含在 RGB 图像中或单独包含的 alpha 通道。在这种情况下,您可以使用以下方法将 A 放在 B 上:
output = (A * alpha) + (B * (1-alpha))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6276 次 |
最近记录: |