Opengles如何将黑色像素更改为透明像素

时间:2017-11-02 09:55:59

标签: android opengl-es shader

我的代码是

df$var1 <- as.numeric(df$var1)

我的问题是如何判断像素是黑色的?我怎么能这样做,应该将rgb更改为hsv?

1 个答案:

答案 0 :(得分:0)

        return "precision mediump float; \n"+
            "   varying highp vec2 " + VARYING_TEXTURE_COORD + ";\n" +
            "   \n" +
            "   uniform sampler2D " + TEXTURE_SAMPLER_UNIFORM + ";\n" +
            "   \n" +
            " void main()\n" +
            " {\n" +
            " vec3 keying_color = vec3(0.0, 0.0, 0.0);\n" +
            " float thresh = 0.45; // [0, 1.732]\n" +
            " float slope = 0.1; // [0, 1]\n" +
            " vec3 input_color = texture2D(" + TEXTURE_SAMPLER_UNIFORM + ", " + VARYING_TEXTURE_COORD + ").rgb;\n" +
            " float d = abs(length(abs(keying_color.rgb - input_color.rgb)));\n" +
            " float edge0 = thresh * (1.0 - slope);\n" +
            " float alpha = smoothstep(edge0, thresh, d);\n" +
            " gl_FragColor = vec4(input_color,alpha);\n" +
            " }";

在keying_color变量中存储我们要替换的实际颜色。它使用经典的RGB​​模型,但强度不表示为0-255整数。它是0-1范围内的浮点值。 (所以0 = 0,255 = 0,122 = 0.478 ...)在我们的例子中,绿色有值(0.647,0.941,0.29),但如果你使用不同的视频,自己测量颜色。
注意:确保您的颜色正确。某些颜色测量软件会自动将颜色转换为略有不同的格式,例如AdobeRGB 那么神奇的地方呢? 我们在input_color中加载当前像素颜色,然后计算输入和键控颜色之间的差异。基于此差异,计算α值并将其用于特定像素 您可以使用斜率和阈值控制比较的严格程度。它有点复杂,但最基本的规则是:你拥有的门槛越高,容忍度越大 那么,我们完成了,对吧?不。

您可以查看以下链接:http://blog.csdn.net/u012847940/article/details/47441923