gpt4 book ai didi

ios - OpenGL:色度键与白色

转载 作者:行者123 更新时间:2023-12-01 16:08:34 26 4
gpt4 key购买 nike

我正在遵循Erik Buck的this指南来为我的视频处理获得绿屏效果。这确实很棒,但是并不能完全满足我的要求。我的任务是在iOS项目中使用OpenGL,使用相同的方法“剪切”白色。

以下是Erik Buck的项目中的OpenGL代码,以查找每个纹理的绿色纹理像素并将其不透明度分配为零:

varying highp vec2 vCoordinate;
uniform sampler2D uVideoframe;


void main()
{
// Look up the color of the texel corresponding to the fragment being
// generated while rendering a triangle
lowp vec4 tempColor = texture2D(uVideoframe, vCoordinate);

// Calculate the average intensity of the texel's red and blue components
lowp float rbAverage = tempColor.r * 0.5 + tempColor.b * 0.5;

// Calculate the difference between the green element intensity and the
// average of red and blue intensities
lowp float gDelta = tempColor.g - rbAverage;

// If the green intensity is greater than the average of red and blue
// intensities, calculate a transparency value in the range 0.0 to 1.0
// based on how much more intense the green element is
tempColor.a = 1.0 - smoothstep(0.0, 0.25, gDelta);

// Use the cube of the transparency value. That way, a fragment that
// is partially translucent becomes even more translucent. This sharpens
// the final result by avoiding almost but not quite opaque fragments that
// tend to form halos at color boundaries.
tempColor.a = tempColor.a * tempColor.a * tempColor.a;

gl_FragColor = tempColor;
}

通过反复试验,我能够操纵该代码以使不同的颜色透明,但是事实证明白色是一个挑战。

如何使背景中的白色透明?

enter image description here

最佳答案

您将需要在着色器中修改算法以更改颜色。 gDelta的值是决定像素输出不透明度的因素。在您发布的代码中,一旦绿色分量的值高于红色和蓝色的平均值,像素就会开始变得透明。

基本上,您只需要确定要使用哪个公式来检测“白色”即可。一种非常简单(相似)的方法是计算所有分量的平均值,并定义一些截止值。例如:

//...
float cutoff = 0.8f;
lowp float gDelta = cutoff - dot(tempColor, vec4(0.33, 0.33, 0.33, 0.0));
//...

您将需要对此稍作修改以提供适合您需要的颜色范围。

另外,此过程正式称为 chroma-keying 。尽管可以使用任何颜色,但通常与“切除”对象不匹配的颜色。鲜绿色是常见的选择,因为它很少与肤色或衣服搭配。因此,白色可能是一个非常糟糕的选择。

关于ios - OpenGL:色度键与白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46411245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com