opengl进行绿色屏幕抠图
在进行一个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进行绿色屏幕抠图相关推荐
- OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)...
一. OpenGL的基本概念 OpenGL 的结构可以从逻辑上划分为下面 3 个部分: 图元(Primitives) 缓冲区(Buffers) 光栅化(Rasterize) 图元(Primitives ...
- Windows OpenGL 图像绿幕抠图
目录 一.OpenGL 图像绿幕抠图 1.原始图片 2.效果演示 二.OpenGL 图像绿幕抠图源码下载 三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 & ...
- OpenGL 图像绿幕抠图
目录 一.OpenGL 图像绿幕抠图 1.IOS Object-C 版本 1.Windows OpenGL ES 版本 2.Windows OpenGL 版本 二.OpenGL 图像绿幕抠图 GLSL ...
- Wondershare Filmora for Mac如何使用绿色屏幕 (色度键)?
Wondershare Filmora for Mac如何使用绿色屏幕 (色度键)?Wondershare Filmora for Mac是一款Mac平台上非常优秀专业的视频编辑器,支持导入所有流行的 ...
- 使用OpenGL在电脑屏幕上绘图
学过OpenGL的人都知道,要想利用OpenGL函数进行绘图,就要创建一个显示窗口.每次绘图,第一件事恐怕就是创建窗口了.肯定也有人跟我一样想过:能不能不在那个黑乎乎的窗口上绘图,而是直接绘制在电脑屏 ...
- 绿色屏幕键盘监控专家【安全相关】
软件大小:3.25MB 软件语言:简体中文 软件类别: 软件授权:免费软件 下载次数:5 更新时间:2013-07-15 10:07:54 应用平台:Win2K,WinXP,Win2003,Vista ...
- 单色背景抠图方法(绿色背景抠图、肤色检测)之——chroma kye
首先,我这篇博客是基于别人博客的研究,创建自己的project来练习 1.肤色侦测法(每种方法提供完整源码下载链接) 下载链接:点击打开链接http://download.csdn.net/detai ...
- 【我的OpenGL学习进阶之旅】【持续更新】关于学习OpenGL的一些资料
目录 一.相关书籍 OpenGL 方面 C方面 NDK 线性代数 二.相关博客 2.0 一些比较官方的链接 2.1 OpenGL着色器语言相关 2.2 [[yfan]](https://segment ...
- Windows OpenGL ES 图像绿幕抠图
目录 一.OpenGL ES 图像绿幕抠图 1.原始图片 2.效果演示 二.OpenGL ES 图像绿幕抠图源码下载 三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学 ...
最新文章
- Python 3/前端 画图工具:Matplotlib,canvajs,pyecharts
- 图解 | 当我们在读写 Socket 时,我们究竟在读写什么?
- nyoj1121周期串
- js判断fck编辑器内容是否为空并获得焦点
- XGBoost在携程搜索排序中的应用
- jQuery与JS的区别,以及jQuery的基础语法
- 用hundred造句子_八个有趣的开学破冰游戏,线上线下都能用
- datagridview使用mysql_使用DataGridView进行增删改查,并同步到数据库
- 微信公开课讲师黄咪咪:熟读规则,玩转小游戏
- thinkphp3.1 mysql5.6_ThinkPHP3.1新特性之多数据库操作更加完善
- 统计查询,实现将结果集竖排显示
- 微信支付超详细教程(附商城订单处理逻辑)
- sap系统和服务器的关系,erp系统和sap系统的区别
- 036多级节点实现层叠展开与收缩的功能
- 文本挖掘之情感分析在网络视频弹幕的应用 ——以《都挺好》弹幕数据为例
- 计算机专业不同行业薪资,各专业薪资对比:这些专业薪资高
- 高盛发布区块链报告:从理论到实践(中文版)二
- h5唤醒软键盘(数字键盘)
- 基于连续优化的规划算法:以二次规划为例
- java 操作Zip文件(压缩、解压、加密)