Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 需要帮助了解Alpha通道吗_Image Processing_Transparency_Alpha_Alphablending_Alpha Transparency - Fatal编程技术网

Image processing 需要帮助了解Alpha通道吗

Image 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

我有一个像素的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。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