opengl相机通过shader修改片断着色器来实现换色,改色,肤色检测等特殊效果
1.嘴唇检测并改掉色,不准确时可能和相同有关,关于嘴唇颜色检测参考文章
https://blog.csdn.net/Trent1985/article/details/46330847
private static final String CAMERA_INPUT_FRAGMENT_SHADER_OES = "" +
"#extension GL_OES_EGL_image_external : require\n" +
"\n" +
"precision mediump float;\n" +
"varying vec2 textureCoordinate;\n" +
"uniform samplerExternalOES inputImageTexture;\n" +
"\n" +
"void main()\n" +
"{\n" +
" vec4 nColor=texture2D(inputImageTexture, textureCoordinate);\n"+
" if (log(nColor.g / (pow(nColor.b, 0.391) * pow(nColor.r, 0.609))) < -0.4)\n"+
" {\n"+
" gl_FragColor = vec4(1.0, 1.0, 1.0, nColor.a);\n"+
" }\n"+
" else\n"+
" {\n" +
" gl_FragColor = nColor;\n"+
" }\n"+
"}";
2.计算高斯模糊
precision mediump float;
//在片元着色器这里添加这个 sampler2D 表示我们要添加2D贴图
uniform sampler2D u_TextureUnit;
varying vec2 v_TextureCoordinates;
void main(){
vec4 color = vec4(0.0);
int coreSize=3;
int halfSize=coreSize/2;
float texelOffset = 0.01;
//创建我们计算好的卷积核
float kernel[9];
kernel[6] = 1.0; kernel[7] = 2.0; kernel[8] = 1.0;
kernel[3] = 2.0; kernel[4] = 4.0; kernel[5] = 2.0;
kernel[0] = 1.0; kernel[1] = 2.0; kernel[2] = 1.0;
int index = 0;
//每一块都进行图像卷积。
for(int y=0;y<coreSize;y++)
{
for(int x = 0;x<coreSize;x++)
{
vec4 currentColor = texture2D(u_TextureUnit,v_TextureCoordinates+vec2(float((-1+x))*texelOffset,float((-1+y))*texelOffset));
color += currentColor*kernel[index];
index++;
}
}
//归一处理
color/=16.0;
gl_FragColor=color;
}
3黑白滤镜
precision mediump float;
//在片元着色器这里添加这个 sampler2D 表示我们要添加2D贴图
uniform sampler2D u_TextureUnit;
//定义一个u_ChangeColor,因为颜色的变量是RGB,所以使用vec3
uniform vec3 u_ChangeColor;
varying vec2 v_TextureCoordinates;
void main(){
//得到2d color
vec4 nColor=texture2D(u_TextureUnit,v_TextureCoordinates);
//黑白图片
float c= nColor.r*u_ChangeColor.r+nColor.g*u_ChangeColor.g+nColor.b*u_ChangeColor.b;
gl_FragColor = vec4(c,c,c,nColor.a);
}
4冷暖色调的处理
与上面的黑白色的处理相似,冷色调的处理就是单一增加蓝色通道的值,暖色调的处理可以增加红绿通道的值。
precision mediump float;
//在片元着色器这里添加这个 sampler2D 表示我们要添加2D贴图
uniform sampler2D u_TextureUnit;
//定义一个u_ChangeColor,因为颜色的变量是RGB,所以使用vec3
uniform vec3 u_ChangeColor;
varying vec2 v_TextureCoordinates;
//modifyColor.将color限制在rgb
void modifyColor(vec4 color){
color.r=max(min(color.r,1.0),0.0);
color.g=max(min(color.g,1.0),0.0);
color.b=max(min(color.b,1.0),0.0);
color.a=max(min(color.a,1.0),0.0);
}
void main(){
//得到2d color
vec4 nColor=texture2D(u_TextureUnit,v_TextureCoordinates);
//简单色彩处理,冷暖色调、增加亮度、降低亮度等
vec4 deltaColor=nColor+vec4(u_ChangeColor,0.0);
modifyColor(deltaColor);
gl_FragColor=deltaColor;
}
5改色
"vec4 nColor=texture2D(inputImageTexture, textureCoordinate);\n"+
"if (nColor.r<0.5 && nColor.g<0.5 && nColor.b<0.5)" +
"{\n"+
" gl_FragColor = vec4(1.0,1.0,1.0,nColor.a);\n" +
"}\n" +
"else\n" +
"{\n"+
" gl_FragColor = texture2D(inputImageTexture, textureCoordinate);\n" +
"}\n"+
参考:
https://blog.csdn.net/qq_33275597/article/details/80869913
https://blog.csdn.net/qq_33275597/article/details/80869913
https://www.jianshu.com/p/320980800358
光照
https://blog.csdn.net/yulinxx/article/details/72720963
https://blog.csdn.net/yulinxx/article/details/53670481
https://cloud.tencent.com/developer/article/1155487
海洋
https://blog.csdn.net/vily_lei/article/details/80919052
相机
https://cloud.tencent.com/developer/article/1175711
相机特效
https://cloud.tencent.com/developer/article/1185194
美颜滤波
https://blog.csdn.net/King1425/article/details/77776931?locationNum=4&fps=1
opengl相机通过shader修改片断着色器来实现换色,改色,肤色检测等特殊效果相关推荐
- Unity Shader(深入了解顶点片断着色器)
Unity Shader(深入了解顶点片断着色器) 什么是渲染流水线 大致可以分为以下三个大阶段: 应用阶段(Application Stage): 就是我们的原始素材准备阶段,包括我们的模型.贴图. ...
- OpenGL入门(三)之着色器Shader
本系列文章为Learn OpenGL个人学习总结! OpenGL入门(一)之认识OpenGL和创建Window OpenGL入门(二)之渲染管线pipeline,VAO.VBO和EBO OpenGL入 ...
- OpenGL shader class自定义着色器的实例
OpenGL shader class自定义着色器 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #in ...
- OpenGL Compute Shader Raytracing 计算着色器光线追踪的实例
OpenGL Compute Shader Raytracing 计算着色器光线追踪 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 // #define USE_ ...
- OpenGL 2D贴图texture与着色器Shader
OpenGL 2D贴图texture与着色器Shader 运行效果 利用GLSL操作shader着色器实现平移.纹理与顶点颜色的叠加处理: 利用GLSL操作shader着色器实现平移.旋转等操作: 定 ...
- OpenGL ES _ 着色器_片断着色器详解
OpenGL ES _ 入门_01 OpenGL ES _ 入门_02 OpenGL ES _ 入门_03 OpenGL ES _ 入门_04 OpenGL ES _ 入门_05 OpenGL ES ...
- Unity Shader - Predefined Shader preprocessor macros 着色器预处理宏
目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:Predefined Shader preprocessor macros 版本:2019.1 Predefined Sh ...
- Unity Shader:细分着色器(Tessellation Shader)在Unity顶点着色器中的写法以及各参数变量解释
图1:在Unity内将sphere细分后 图2:在Unity内将sphere细分后 Unity官网关于细分着色器的资料比较少,只有在Surface Shader中使用的例子.我看了下Surface S ...
- 【我的OpenGL学习进阶之旅】着色器和程序(上)------着色器
着色器和程序 一.前言 二.着色器和程序 2.1 创建和编译一个着色器 2.1.1 创建着色器 2.1.2 删除着色器 2.1.3 提供着色器源代码 2.1.4 编译色器 2.1.4 查询有关着色器对 ...
最新文章
- 关于打开新链接,用当前页还是用新页面?
- 【C++基础 09】避免对象的拷贝
- armv7的linux系统,CentOS 7(1611) for ARM(armhfp)发布
- 华南理工计算机接口技术随堂练习_研究生考试计算机408跟845有什么区别?
- H5-geolocation学习
- 对python的功能和扩展功能的认知_Python基础-基础认知和库了解
- java 蓝牙指定连接失败_java – Android蓝牙连接 – 服务发现失败
- css 平行四边形 梯形 组合_微课|人教版五年级数学上册6.4组合图形的面积(P99)...
- java的各种加载和初始化的详细过程
- 浏览文件服务器,浏览文件服务器
- python list append 相关知识点
- vue网页打印后事件失效
- JZOJ100047. 【NOIP2017提高A组模拟7.14】基因变异
- AI-Tesseract4.0-OCR训练相关
- 软件测试自学入门书籍
- 奇异值分解的几何原理
- 透视变换(perspective transformation)
- 手把手教你用Java实现一个“网易云音乐”
- adb卸载和安装系统应用
- CCTV[经济半小时]2009民生报告:安身立业
热门文章
- EmotioNet_
- Python数学建模系列(六):蒙特卡洛算法
- react 关于iconfont图标应用和动态图标
- 我看google事件
- 百度不收录怎么办?教大家五个简单办法
- 4.3 并发技术:管道通信
- C++笔记(十四)——this指针
- 使用ffmpeg添加rtsp字幕流 (t140)
- 学习泰课的Unity3D黑暗之光RPG游戏开发(一)——学习目录介绍
- Python2.7+ROS环境:AttributeError:‘module’ has no attribute ‘CALIB_HAND_EYE_TSAI’