Android OpenGL ES实现简单绿幕抠图

这篇具有很好参考价值的文章主要介绍了Android OpenGL ES实现简单绿幕抠图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 正文
    • OES Filter
    • BlendShader Filter
    • 最后的效果
    • 缺陷

正文

Android OpenGL ES实现简单绿幕抠图,android,数码相机

实现绿幕抠图,其实想法很简单。 这里简单粗暴的使用着色器替换。

OES Filter

直接实现在相机预览上的Shader

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#extension GL_OES_EGL_image_external : require

precision mediump float;

                                 

varying vec2 vTextureCoordinate;

uniform samplerExternalOES uTexture;

const float pixel = 30.0;

void main() {

    vec4 tc = texture2D(uTexture, vTextureCoordinate);

    float r = tc.x * 255.0;

    float g = tc.y * 255.0;

    float b = tc.z * 255.0;

    if(g>140.0 && r<128.0 && b<128.0){

        tc.x =1.0;

        tc.y =1.0;

        tc.z =1.0;

         tc.w =0.0;

    }else{

     tc.w =1.0;

    }

    gl_FragColor = tc, 1.0;

}

这里的关键是,判断颜色的范围。这里简单的认定 g>140.0 && r<128.0 && b<128.0 时为绿色。当是绿色的时候,就将其颜色换成白色。同时alpha值设置为0.0

BlendShader Filter

这个Shader是将背景的纹理,进行贴图,贴到我们扣的这部分图上。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

precision mediump float;

varying vec2 vTextureCoord;

varying vec2 vExtraTextureCoord;

uniform sampler2D uTexture;

uniform sampler2D uExtraTexture;

void main() {

    vec4 base = texture2D(uTexture, vTextureCoord);

    vec4 overlay = texture2D(uExtraTexture, vExtraTextureCoord);

    vec4 outputColor;

    if(base.r==1.0 && base.g==1.0 && base.b==1.0 && base.a==0.0){

      outputColor.r = base.a*base.r + overlay.r * (1.0 - base.a);

      outputColor.g = base.a*base.g + overlay.g * (1.0 - base.a);

      outputColor.b = base.a*base.b + overlay.b * (1.0 - base.a);

      outputColor.a = base.a;

    }else{

       outputColor.r = base.r;

       outputColor.g = base.g;

       outputColor.b = base.b;

       outputColor.a = base.a;

    }

    gl_FragColor = outputColor;

}

这个shader就是加载了两个贴图。一个是来自上面相机的FBO的OffscreenTextureId,一个是来自我们另外的背景贴图。 这段代码就算,如果是辨认到之前我们处理的区域的话,就将两个图片贴加到一起,如果是范围内,就用原来的图片。

简单的绿幕抠图很简单,只是判断到对应的颜色,然后将对应的贴图贴到这个部分上,就可以了。

最后的效果

  • 屏幕中的原图

Android OpenGL ES实现简单绿幕抠图,android,数码相机

最后的效果

Android OpenGL ES实现简单绿幕抠图,android,数码相机

缺陷

边缘情况比较明显。显示比较突兀。 我们可以做的更好吗?文章来源地址https://www.toymoban.com/news/detail-534404.html

到了这里,关于Android OpenGL ES实现简单绿幕抠图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android OpenGL ES 学习(一) -- 基本概念

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenG

    2024年01月23日
    浏览(43)
  • Android OpenGL ES 学习(四) -- 正交投影

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenG

    2024年02月13日
    浏览(42)
  • Android OpenGL ES 学习(五) -- 渐变色

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenG

    2024年02月07日
    浏览(40)
  • LearnOpenGL - Android OpenGL ES 3.0 绘制三角形

    LearnOpenGL 笔记 - 入门 01 OpenGL LearnOpenGL 笔记 - 入门 02 创建窗口 LearnOpenGL 笔记 - 入门 03 你好,窗口 LearnOpenGL 笔记 - 入门 04 你好,三角形 OpenGL - 如何理解 VAO 与 VBO 之间的关系 经过一段时间 OpenGL 的学习,我们已经掌握了如何使用 glwf 在桌面端绘制简单图形。现在让我们把目光

    2024年02月12日
    浏览(40)
  • Android APP OpenGL ES应用(01)GLSurfaceView 2D/3D绘图基础

    OpenGL本身是开放图形库的一种标准,定义了一个跨语言、跨平台的编程规范,主要用于3D图形编程。OpenGLES是OpenGL的裁剪版本,主要是针对嵌入式设备/移动设备 (像手机、游戏机这种等等。。。) 进行裁剪后的库。对于Android设备来说主要是用OpenGL ES。从初学者角度来讲 Ope

    2023年04月20日
    浏览(48)
  • OpenGL ES 2.0 for Android教程(二):定义顶点和着色器

    文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(三) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章介绍我们

    2023年04月14日
    浏览(43)
  • OpenGL ES 2.0 for Android教程(三):编译着色器并绘制到屏幕

    文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章将继续我

    2023年04月26日
    浏览(59)
  • Android OpenGL ES 学习(十) – GLSurfaceView 源码解析GL线程以及自定义 EGL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投影 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenG

    2024年02月05日
    浏览(47)
  • Android OpenGL ES 学习(十三) -离屏渲染FBO(截图)RBO, OES转 FBO

    Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenGL ES 学习(七) –

    2024年02月12日
    浏览(41)
  • Android OpenGl 介绍(一)

    一、OpenGl 介绍 看到这个介绍,相信大家都不会陌生,因为在平时的工作中,或多或少大家都会听说过 openGl 这个东西,而且对它的印象基本都是觉得比较高深难懂。其实这个东西也不是那么难,那么无从下手,首先必须要了解一些基本的背景和搞懂一些基本概念,然后就可

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包