首页 > 其他分享 >在 WPF 中将视频中的纯绿色显示为透明

在 WPF 中将视频中的纯绿色显示为透明

时间:2024-12-29 22:20:54浏览次数:1  
标签:视频 中将 color Shader https float4 WPF com

最近需要制作一个类似桌面宠物的东西,碰到了这样一个问题:受 MediaElement 支持的带 alpha 通道的视频格式有限,且后续还要接入相关的深度学习模型动态生成口型,大概率生成不了透明背景。这个该怎么办呢?一个思路是把视频抽帧抠图,然后依次显示透明背景的图片(或者再组合成视频播放)。另外一个想法是直接在 WPF 中把某种颜色显示为透明。

最终我们采用的是后一种办法,并使用 Pixel Shader 来解决这个问题。但是由于 CodePlex 已经关闭,甚至相关的工具都下载不到,最终找到了大佬的一篇文章:https://blog.walterlv.com/post/create-wpf-pixel-shader-effects-using-shazzam-shader-editor.html

这篇文章告诉我们该如何使用 Shazzam Shader Editor ,并在 WPF 项目中使用你所写的 Shader 。里面提供了一个镜像地址,可以下载到需要的 Shazzam Shader Editor 。不过好像只有代码,如果想直接下载编译好的工具可以看另外一个仓库:https://github.com/webmaster442/ShazzamTool/releases

但是这篇文章并不包括关于 HLSL 基本语法的介绍。所以我另外参考了 StackOverFlow 上的相关问题,以及 GitHub 上的相关代码(都放在文章最后),最终达到了把纯绿色显示为透明的效果:

sampler2D input : register(s0);

float4 main(float2 uv : TEXCOORD) : COLOR 
{
    float4 color = tex2D(input, uv);
    if (color.r == 0 && color.g == 1 && color.b == 0)
    {
        color.rgba = 0;
    }
    return color;
}

这里要注意 r 、 g 、 b 是 0 到 1 之间的浮点数,而不是 0 到 255 。此外,设置 alpha 是没有用的,出于性能考虑, WPF 默认透明度已预乘在 rgb 中。

另外,视频的背景可能不是完全的纯绿色,所以可能需要这样限制一个球体的范围,这里 0.6 可根据实际情况调节:

sampler2D input : register(s0);

float4 main(float2 uv : TEXCOORD) : COLOR 
{
    float4 color = tex2D(input, uv);
    if ((color.r * color.r + (color.g - 1) * (color.g - 1) + color.b * color.b) < 0.6)
    {
        color.rgba = 0;
    }
    return color;
}

参考资料:

标签:视频,中将,color,Shader,https,float4,WPF,com
From: https://www.cnblogs.com/yueyinqiu/p/18639679

相关文章

  • 400个计算机毕业设计项目推荐(源码+文档+视频)
    计算机毕业设计案例Java毕业设计案例ASP.NET毕业设计案例PHP毕业设计案例微信小程序毕业设计案例基于Java的农产品管理系统基于ASPNETMVC的网站式音乐播放基于PHP的图书馆座位管理系统微信小程序自习室预约管理系统–2024计算机毕业设计基于Java的城市公交查询与可视化系统......
  • 人工智能短视频内容理解与生成技术在美团的创新实践12
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进行......
  • 人工智能短视频内容理解与生成技术在美团的创新实践13
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进......
  • 人工智能短视频内容理解与生成技术在美团的创新实践5
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进......
  • video-analyzer:开源视频分析工具,支持提取视频关键帧、音频转录,自动生成视频详细描述
    ❤️如果你也关注AI的发展现状,且对AI应用开发非常感兴趣,我会每日跟你分享最新的AI资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!......
  • WPF GeneralTransform3DTo2D TransformToAncestor
    //xaml<Windowx:Class="WpfApp113.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • WPF ModelVisual3D Viewport2DVisual3D
    <Windowx:Class="WpfApp110.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WPF Viewport3D ModelVisual3D ModelUIElement3D GeometryModel3D
    //xaml<Windowx:Class="WpfApp109.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • WPF Model3DGroup
    <Windowx:Class="WpfApp108.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 基于Java的springboot/SSM+vue.js+uniapp小程序的饮食分享平台附带文章源码部署视频讲
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......