iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >AndroidOpenGLES实现简单绿幕抠图
  • 224
分享到

AndroidOpenGLES实现简单绿幕抠图

2024-04-02 19:04:59 224人浏览 独家记忆
摘要

目录正文OES FilterBlendShader Filter最后的效果缺陷正文 实现绿幕抠图,其实想法很简单。 这里简单粗暴的使用着色器替换。 OES Filter 直接实现在

正文

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

OES Filter

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

#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是将背景的纹理,进行贴图,贴到我们扣的这部分图上。

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绿幕抠图的资料请关注编程网其它相关文章!

--结束END--

本文标题: AndroidOpenGLES实现简单绿幕抠图

本文链接: https://www.lsjlt.com/news/152418.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • AndroidOpenGLES实现简单绿幕抠图
    目录正文OES FilterBlendShader Filter最后的效果缺陷正文 实现绿幕抠图,其实想法很简单。 这里简单粗暴的使用着色器替换。 OES Filter 直接实现在...
    99+
    2024-04-02
  • OpenCV去除绿幕抠图源码
    绿布原图 抠图后的图片 源码 #include <opencv2/opencv.hpp> #include <iostream> #include <...
    99+
    2024-04-02
  • 原生JS实现简单屏幕截图
    目录了解 HTML5 中的 Canvas获取屏幕截图结论在 Web 开发中,截图是一项非常有用的技术。可以使用截图来记录当前屏幕状态,生成缩略图或进行屏幕分享等操作。在本文中,我将介...
    99+
    2023-05-15
    JS 屏幕截图 JS 原生截图
  • canvas像素点操作之视频绿幕抠图的示例分析
    这篇文章将为大家详细讲解有关canvas像素点操作之视频绿幕抠图的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下:用...
    99+
    2023-06-09
  • python实现抠图
    import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('b.jpg') mask = np.zeros(img.sh...
    99+
    2023-01-31
    抠图 python
  • 原生JS怎么实现简单屏幕截图
    这篇文章主要介绍“原生JS怎么实现简单屏幕截图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“原生JS怎么实现简单屏幕截图”文章能帮助大家解决问题。了解 HTML5 中的 CanvasHTML5 中的...
    99+
    2023-07-06
  • OpenCV实现抠图工具
    本文实例为大家分享了OpenCV实现抠图工具的具体代码,供大家参考,具体内容如下 在计算机图像领域,我们经常需要做一些抠图的工作,将图像中的目标感兴趣区域提取出来,剔除其他冗余的背景...
    99+
    2024-04-02
  • 基于OpenCV-python3实现抠图
    在上一篇博客进行了证件照更换背景颜色,纯蓝色,红色,白色之间的替换,有人私信我,可以不可以把背景换成其他图片,而不是单纯的颜色填充。这在photoshop里面就是选中一个图层然后复制到另外一张图片上去,用代码实现的话和上篇博文换...
    99+
    2023-01-31
    抠图 OpenCV
  • JavaScript css3实现简单视频弹幕功能
    本文尝试写了一个demo模拟了最简单的视频弹幕功能。 思路: 设置一个<div>和所播放的video的大小一致,把这个div标签蒙在video上面用于放置弹幕。在vide...
    99+
    2024-04-02
  • iOS实现简单长截图
    本文实例为大家分享了iOS实现简易的长截图的具体代码,供大家参考,具体内容如下 长截图的实现原理: 实际上是将view的内容绘制成图片,再将各个view绘制出来的图片拼接出来。 具体...
    99+
    2024-04-02
  • 利用OpenCV实现绿幕视频背景替换
    目录前言一、图像预处理二、HSV色彩空间转换1. cvtColor色彩空间转换2. inRange抠图三、背景替换四、源码总结前言 本文将使用OpenCV C++ 进行绿幕视频背景替...
    99+
    2024-04-02
  • JavaScript实现简单图片切换
    本文实例为大家分享了JavaScript实现简单图片切换的具体代码,供大家参考,具体内容如下 下边给出几种方法进行图片切换: 方法一 (小白专用款!简单易懂) 下边附上代码: &...
    99+
    2024-04-02
  • Java实现简单的扫雷图
    用Java实现简单的扫雷图,供大家参考,具体内容如下 扫雷图的思想是: 1、地图可以是一个二维数组,并对数组进行初始化 2、随机生成雷的位置,可以用Random函数进行随机生成也...
    99+
    2024-04-02
  • Qt实现简单折线图表
    本文实例为大家分享了Qt实现简单折线图表的具体代码,供大家参考,具体内容如下 main.cpp #include <QApplication> #include <...
    99+
    2024-04-02
  • Android Studio实现简单绘图板
    本文实例为大家分享了Android Studio实现简单绘图板的具体代码,供大家参考,具体内容如下 目的 设计一个手绘图形的画板 工具及环境 使用java语言,在Android st...
    99+
    2024-04-02
  • js实现简单图片切换
    本文实例为大家分享了JavaScript实现图片间切换的具体代码,供大家参考,具体内容如下 代码的主要思路: 1、先给“下一张”和“上一张&rdq...
    99+
    2024-04-02
  • 用js实现简单轮播图
    本文实例为大家分享了js实现简单轮播图的具体代码,供大家参考,具体内容如下 1.实现功能: 2.实现思路: (1)鼠标放到图片上,显示箭头,用display来做。 (2)动态生成...
    99+
    2024-04-02
  • js实现简单拼图游戏
    本文实例为大家分享了js实现简单拼图游戏的具体代码,供大家参考,具体内容如下 HTML仅有一个id为game的div,并且没有编写css样式,只需要在img文件夹中放置一个图片文件就...
    99+
    2024-04-02
  • Vue+Echarts实现简单折线图
    本文实例为大家分享了Vue+Echarts实现简单折线图的具体代码,供大家参考,具体内容如下 Vue+Echarts实现一个折线图,打开vue的项目: 1、在项目里面安装echart...
    99+
    2024-04-02
  • android实现简单拼图游戏
    本文实例为大家分享了android实现简单拼图游戏的具体代码,供大家参考,具体内容如下 1. 2. //使用回调接口,首先初始化pintuview并绑定,实现回调接口的方法    ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作