【Android平台Camera实时滤镜实现方法探讨--实时美颜滤镜】莫问天涯路几重,轻衫侧帽且从容。这篇文章主要讲述Android平台Camera实时滤镜实现方法探讨--实时美颜滤镜相关的知识,希望能为你提供帮助。
上一章完毕了对图片的磨皮处理。经过简单算法流程优化,能够达到非常快的速度。可是不能用于实时美颜。经实验,若採用仅仅处理Y信号的方案。半径极限大约是5-10,超过10则明显感受到卡顿。但对于1920X1080的预览分辨率来说。取10为半径非常难得到理想效果。即使将分辨率减少到1280X720也差强人意。所以非常难简单的直接应用在移动端实时处理上。
还有一方面,人物的正常肤,色应该是偏红。所以则会导致人物图像的红色通道偏亮,使红色通道保留的细节成分较少,相比之下。绿色通道保留很多其它细节,所以。普通情况下我们也能够仅仅採用过滤绿色通道来实现实时磨皮。以下对思路简介:
1.取出绿色通道,对绿色通道进行模糊处理,比如高斯模糊。得到模糊后的值 sampleColor:
在顶点着色器中创建长度为20~25的数组,作为片段着色器须要取数据的点
varying vec2 blurCoordinates[20];
blurCoordinates[0] = inputTextureCoordinate.xy + singleStepOffset * vec2(0.0, -10.0); .... blurCoordinates[19] = inputTextureCoordinate.xy + singleStepOffset * vec2(4.0, -4.0); < /span>
在片段着色器依次取出这些点的绿色通道值 ,乘以权重。最后除以总权重。得到模糊后的绿色通道值
2.用原图绿色通道值 减去sampleColor。加上0.5(即128),1+ 2两个步骤即PS中的高反差保留:
vec3 centralColor = texture2D(inputImageTexture, textureCoordinate).rgb; float highpass = centralColor.g - sampleColor + 0.5;
3.对上述结果值 进行3-5次强光处理(见第七章的“叠加”混合模式)。此步骤能够使得噪声更加突出:
if(color < = 0.5){ color = color * color * 2.0; }else{ color = 1.0 - ((1.0 - color)*(1.0 - color) * 2.0); }
经过1-3之后的图:
4.计算原图的灰度值 ,公式为0.299*R + 0.587*G + 0.114*B:
const highp vec3 W = vec3(0.299,0.587,0.114); float lumance = dot(centralColor, W);
得到灰度图像:
5.将灰度值 作为阈值 ,用来排除非皮肤部分。依据灰度值 计算,将原图与1-3后的结果图合成:
float alpha = pow(lumance, 0.333333); vec3 smoothColor = centralColor + (centralColor-vec3(highpass))*alpha*0.1; < /span>
原图rgb值 与高反差后的结果相比,噪声越大,两者相减后的结果越大,在原结果基础上加上一定值 ,来提高亮度,消除噪声。
pow函数中第二个參数可调(1/3~1),值 越小,alpha越大,磨皮效果越明显。改动该值 可作为美颜程度
6.对混合后结果添加亮度:
7.以灰度值 作为透明度将原图与混合后结果进行滤色、柔光等混合,并调节饱和度:
原图与结果图:
文章图片
文章图片
上面用图片来举样例,剩下的就是打开摄像头切换到前置自己看效果了~
代码地址:(将在晚些时候上传20160108日语)
下文地址中MagicCamera/MagicFilter/res/raw/文件夹下
beautify_fragment.glsl 与 beautify_vertex.glsl
另外:
----------------------------------------------------------------------------------------------------
MagicCamera地址
以GPUImage为基础,採用OpenGL+ JNI开发,并优化了GPUImage预览图像处理过程,去除格 式转换消耗的时间。提升效率
使用GLSL实现了40+ 种滤镜和实时美颜功能
实现了照片磨皮与美白功能
欢迎打开链接点击右上角Star
推荐阅读
- Android学习笔记(24):进度条组件ProgressBar及其子类
- android冷启动优化
- Android中的下拉列表
- App性能优化浅谈
- 安卓权威编程指南 挑战练习 25章 深度优化 PhotoGallery 应用
- Android加壳native实现
- Android Studio 入门
- 启动weblogic报错(string value '2.4' is not a valid enumeration value for web-app-versionType in)
- thisapply/callbind闭包函数变量复制