Image processing 需要帮助了解Alpha通道吗
我有一个像素的RGB元组,我们称之为p 255,0,0是p的颜色,alpha通道为1.0 alpha通道为0.8时,p的颜色变为255、51、51Image processing 需要帮助了解Alpha通道吗,image-processing,transparency,alpha,alphablending,alpha-transparency,Image Processing,Transparency,Alpha,Alphablending,Alpha Transparency,我有一个像素的RGB元组,我们称之为p 255,0,0是p的颜色,alpha通道为1.0 alpha通道为0.8时,p的颜色变为255、51、51 如何获得影响p颜色的像素的颜色 看看你提供的数字: (1.0-0.8)*255 ~= 50.9 = 51 其中: 1.0是最大阿尔法强度 0.8是当前设置的alpha强度 255是每个RGB通道的最大强度,表示背景颜色 这符合您示例中的B和G通道 所以,在一般情况下,它似乎是一个简单的加权平均值之间的通道值或RGB和背景色在您的情况下,白色-255
如何获得影响p颜色的像素的颜色 看看你提供的数字:
(1.0-0.8)*255 ~= 50.9 = 51
其中:
1.0是最大阿尔法强度
0.8是当前设置的alpha强度
255是每个RGB通道的最大强度,表示背景颜色
这符合您示例中的B和G通道
所以,在一般情况下,它似乎是一个简单的加权平均值之间的通道值或RGB和背景色在您的情况下,白色-255。Alpha被用作权重
下面是一些Python代码:
MIN_ALPHA=0.0
MAX_ALPHA=1.0
MIN_CH=0
MAX_CH=255
BG_VAL=255
def apply_alpha(old, alpha, bg=255):
assert alpha >= MIN_ALPHA
assert alpha <= MAX_ALPHA
assert old >= MIN_CH
assert old <= MAX_CH
new = old*alpha + (MAX_ALPHA - alpha)*bg
return new
if __name__ == '__main__':
import sys
old, alpha = map(float, sys.argv[1:])
print apply_alpha(old, alpha)
对于其他例子,尤其是非白色背景,可以试试这个——可能就这么简单。如果没有,请用新的示例编辑您的答案,我再看一看。只看您提供的数字:
(1.0-0.8)*255 ~= 50.9 = 51
其中:
1.0是最大阿尔法强度
0.8是当前设置的alpha强度
255是每个RGB通道的最大强度,表示背景颜色
这符合您示例中的B和G通道
所以,在一般情况下,它似乎是一个简单的加权平均值之间的通道值或RGB和背景色在您的情况下,白色-255。Alpha被用作权重
下面是一些Python代码:
MIN_ALPHA=0.0
MAX_ALPHA=1.0
MIN_CH=0
MAX_CH=255
BG_VAL=255
def apply_alpha(old, alpha, bg=255):
assert alpha >= MIN_ALPHA
assert alpha <= MAX_ALPHA
assert old >= MIN_CH
assert old <= MAX_CH
new = old*alpha + (MAX_ALPHA - alpha)*bg
return new
if __name__ == '__main__':
import sys
old, alpha = map(float, sys.argv[1:])
print apply_alpha(old, alpha)
对于其他例子,尤其是非白色背景,可以试试这个——可能就这么简单。如果没有,请用新的示例编辑您的答案,我再看一看。让我们从头开始。只有当它与其他东西混合时,带有alpha的像素才有意义。如果有一个上层U和alpha,下层L是完全不透明的,则方程为:
P = (alpha * U) + ((1.0 - alpha) * L)
重新排列公式,您将获得:
L = (P - (alpha * U)) / (1.0 - alpha)
显然,当alpha为1.0时,这个方程就没有意义了,因为你要除以0
将数字插入显示,对于像素L,R=255、G=255和B=255
根据惯例,图像的最底层几乎都是白色的255255。让我们从头开始。只有当它与其他东西混合时,带有alpha的像素才有意义。如果有一个上层U和alpha,下层L是完全不透明的,则方程为:
P = (alpha * U) + ((1.0 - alpha) * L)
重新排列公式,您将获得:
L = (P - (alpha * U)) / (1.0 - alpha)
显然,当alpha为1.0时,这个方程就没有意义了,因为你要除以0
将数字插入显示,对于像素L,R=255、G=255和B=255
根据惯例,图像中的最底层几乎都是白色的255255