1、项目介绍

输入有背景色的视频,MP4格式,每一帧画面进行处理。
在这里插入图片描述

输入要替换的背景图,jpg格式图片
在这里插入图片描述

最终抠图合成效果
在这里插入图片描述

2 开发环境介绍

开发语言 :webgl 、js
测试浏览器:火狐
IDE :webstorm

3 开发步骤

主要在片元着色器中进行处理

  • 计算当前像素点RGB值对应的HSV值

  • 设定HSV三个分量的权重,根据权重计算当前像素点的HSV值到给定背景色的HSV值的欧式距离

  • 将欧式距离用smoothstep做平滑,0.5以下的一定要滤掉

  • 将原图和背景图用平滑值混合

4、主要GLSL代码
      vec2 RGBtoUV(vec3 rgb)
       {
        return vec2
        (
          rgb.r * -0.169 + rgb.g * -0.331 + rgb.b *  0.5    + 0.5,
          rgb.r *  0.5   + rgb.g * -0.419 + rgb.b * -0.081  + 0.5
        );
      }

      vec4 ProcessChromaKey(vec2 texCoord) 
      {
        vec4 rgba = texture2D(tex, texCoord);
        float chromaDist = distance(RGBtoUV(texture2D(tex, texCoord).rgb), RGBtoUV(keyColor));
        float baseMask = chromaDist - similarity;
        float fullMask = pow(clamp(baseMask / smoothness, 0., 1.), 1.5);
        rgba.a = fullMask;
        float spillVal = pow(clamp(baseMask / spill, 0., 1.), 1.5);
        float desat = clamp(rgba.r * 0.2126 + rgba.g * 0.7152 + rgba.b * 0.0722, 0., 1.);
        rgba.rgb = mix(vec3(desat, desat, desat), rgba.rgb, spillVal);
        return rgba;
      }
5、目录截图

在这里插入图片描述

6 整个工程代码下载
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐