在进行一个AR项目,需要进行抠图,所以就用了一些抠图的方法,先展示一下抠图效果,如下:

抠图之前

抠图之后

蓝色背景
RGB值 : 0, 71, 187
CMYK : 90, 68, 0, 0

绿色背景

RGB值: 0, 177, 64

CMYK : 81, 0, 92, 0

RGB值转换成(0-1)之间,需要除以255

我们直接在fragment shader中进行抠图。

抠图算法方案一:

keying_color = vec3(0.0, 0.6941177, 0.2509804) 是需要扣掉的rgb值,计算2个像素的色差值,色差值在一定阈值智能进行抠图:

#extension GL_OES_EGL_image_external: require
precision mediump  float;
varying vec2 varTexCoordAlpha;
uniform samplerExternalOES texture;
void main() {vec4 texColor = texture2D(texture, vec2(varTexCoordAlpha.x,1.0-varTexCoordAlpha.y));vec3 keying_color = vec3(0.0, 0.6941177, 0.2509804);float thresh = 0.6; // [0, 1.732]float slope = 0.50; // [0, 1]vec3 input_color = texColor.rgb;float d = abs(length(abs(keying_color.rgb - input_color.rgb)));float edge0 = thresh * (1.0 - slope);float alpha = smoothstep(edge0, thresh, d);gl_FragColor = vec4(input_color, alpha);
}

抠图算法方案二:

这个算法是查询到的,具体的可以看一下参考文档进行研究一下。

#extension GL_OES_EGL_image_external: require
precision mediump  float;
varying vec2 varTexCoordAlpha;
uniform samplerExternalOES texture;
void main() {vec4 texColor = texture2D(texture, vec2(varTexCoordAlpha.x,1.0-varTexCoordAlpha.y));float rbAverage = texColor.r * 0.5 + texColor.b * 0.5;float gDelta = texColor.g - rbAverage;texColor.a = 1.0 - smoothstep(0.0, 0.15, gDelta);texColor.a = texColor.a * texColor.a * texColor.a;gl_FragColor = texColor;
}

参考文档:

https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/discard.php

https://stackoverflow.com/questions/17444734/opengl-es-green-screen-but-i-want-to-use-black

https://www.programmersought.com/article/83204897429/

https://forum.unity.com/threads/chroma-key-in-unity-5.359119/?_ga=2.221513246.746374513.1602656168-624735101.1598963093

https://github.com/erikbuck/RealTimeGreenScreen

opengl进行绿色屏幕抠图相关推荐

  1. OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)...

    一. OpenGL的基本概念 OpenGL 的结构可以从逻辑上划分为下面 3 个部分: 图元(Primitives) 缓冲区(Buffers) 光栅化(Rasterize) 图元(Primitives ...

  2. Windows OpenGL 图像绿幕抠图

    目录 一.OpenGL 图像绿幕抠图 1.原始图片 2.效果演示 二.OpenGL 图像绿幕抠图源码下载 三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  & ...

  3. OpenGL 图像绿幕抠图

    目录 一.OpenGL 图像绿幕抠图 1.IOS Object-C 版本 1.Windows OpenGL ES 版本 2.Windows OpenGL 版本 二.OpenGL 图像绿幕抠图 GLSL ...

  4. Wondershare Filmora for Mac如何使用绿色屏幕 (色度键)?

    Wondershare Filmora for Mac如何使用绿色屏幕 (色度键)?Wondershare Filmora for Mac是一款Mac平台上非常优秀专业的视频编辑器,支持导入所有流行的 ...

  5. 使用OpenGL在电脑屏幕上绘图

    学过OpenGL的人都知道,要想利用OpenGL函数进行绘图,就要创建一个显示窗口.每次绘图,第一件事恐怕就是创建窗口了.肯定也有人跟我一样想过:能不能不在那个黑乎乎的窗口上绘图,而是直接绘制在电脑屏 ...

  6. 绿色屏幕键盘监控专家【安全相关】

    软件大小:3.25MB 软件语言:简体中文 软件类别: 软件授权:免费软件 下载次数:5 更新时间:2013-07-15 10:07:54 应用平台:Win2K,WinXP,Win2003,Vista ...

  7. 单色背景抠图方法(绿色背景抠图、肤色检测)之——chroma kye

    首先,我这篇博客是基于别人博客的研究,创建自己的project来练习 1.肤色侦测法(每种方法提供完整源码下载链接) 下载链接:点击打开链接http://download.csdn.net/detai ...

  8. 【我的OpenGL学习进阶之旅】【持续更新】关于学习OpenGL的一些资料

    目录 一.相关书籍 OpenGL 方面 C方面 NDK 线性代数 二.相关博客 2.0 一些比较官方的链接 2.1 OpenGL着色器语言相关 2.2 [[yfan]](https://segment ...

  9. Windows OpenGL ES 图像绿幕抠图

    目录 一.OpenGL ES 图像绿幕抠图 1.原始图片 2.效果演示 二.OpenGL ES 图像绿幕抠图源码下载 三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学 ...

最新文章

  1. Python 3/前端 画图工具:Matplotlib,canvajs,pyecharts
  2. 图解 | 当我们在读写 Socket 时,我们究竟在读写什么?
  3. nyoj1121周期串
  4. js判断fck编辑器内容是否为空并获得焦点
  5. XGBoost在携程搜索排序中的应用
  6. jQuery与JS的区别,以及jQuery的基础语法
  7. 用hundred造句子_八个有趣的开学破冰游戏,线上线下都能用
  8. datagridview使用mysql_使用DataGridView进行增删改查,并同步到数据库
  9. 微信公开课讲师黄咪咪:熟读规则,玩转小游戏
  10. thinkphp3.1 mysql5.6_ThinkPHP3.1新特性之多数据库操作更加完善
  11. 统计查询,实现将结果集竖排显示
  12. 微信支付超详细教程(附商城订单处理逻辑)
  13. sap系统和服务器的关系,erp系统和sap系统的区别
  14. 036多级节点实现层叠展开与收缩的功能
  15. 文本挖掘之情感分析在网络视频弹幕的应用 ——以《都挺好》弹幕数据为例
  16. 计算机专业不同行业薪资,各专业薪资对比:这些专业薪资高
  17. 高盛发布区块链报告:从理论到实践(中文版)二
  18. h5唤醒软键盘(数字键盘)
  19. 基于连续优化的规划算法:以二次规划为例
  20. java 操作Zip文件(压缩、解压、加密)

热门文章

  1. 忙忙碌碌不过这碎银几两
  2. Python 裁剪视频为图片
  3. 大一计算机虚拟机,虚拟机对电脑伤害大吗
  4. android eclipse加密,Elliptic Curve Cryptography:在eclipse android中使用NFC发送加密消息
  5. 4 款超级好用的终端文件管理器
  6. android 实现一个开机自启动的service
  7. android遥控器管理,Android 遥控器适配
  8. LoRa节点如何以ABP方式入网TTN服务器?
  9. 城镇职工修改医疗定点机构?如何查询定点医疗机构编码?
  10. 城科软件协会官网正式上线