P と呼ぶピクセルの RGB タプルがあります。
(255, 0, 0) は、アルファ チャネルが 1.0 の P の色です。
アルファ チャネルが 0.8 の場合、P の色は (255, 51, 51) になります。
P の色に影響を与えているピクセルの色を取得するにはどうすればよいですか?
P と呼ぶピクセルの RGB タプルがあります。
(255, 0, 0) は、アルファ チャネルが 1.0 の P の色です。
アルファ チャネルが 0.8 の場合、P の色は (255, 51, 51) になります。
P の色に影響を与えているピクセルの色を取得するにはどうすればよいですか?
最初から始めましょう。アルファを持つピクセルは、他の何かとブレンドされた場合にのみ意味があります。アルファ付きの上層 U と完全に不透明な下層 L がある場合、方程式は次のようになります。
P = (alpha * U) + ((1.0 - alpha) * L)
式を整理すると、次のようになります。
L = (P - (alpha * U)) / (1.0 - alpha)
アルファが 1.0 の場合、0 で除算することになるため、この式は明らかに意味がありません。
数値を差し込むと、ピクセル L の R=255、G=255、B=255 であることがわかります。
慣例により、画像の最下層がすべて白 (255,255,255) になることは、ほぼ普遍的です。
あなたが提供した数字を見るだけで:
(1.0-0.8)*255 ~= 50.9 = 51
どこ:
これは、例の B および G チャネルに適合します。
したがって、一般的なケースでは、チャネル値(RGBのいずれか)と背景色(あなたの場合は白 - 255)の間の単純な加重平均のようです。重みとしてアルファが使用されています。
ここにいくつかの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)
そしていくつかの出力:
misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 255 0.8
255.0
misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 0 0.8
51.0
他の例 (特に、白以外の背景) でこれを試してみてください。おそらく簡単です。そうでない場合は、新しい例で回答を編集してください。もう一度見てみましょう。