Android下实时滤镜效果怎么实现

Android下实时滤镜效果怎么实现,第1张

一、Android平台滤镜

滤镜这个功能在目前的市场上应用很广泛,发展也非常快,总结起来,基本上有以下三种应用会包含滤镜功能,都各有所长。

二、相机滤镜介绍

1、相机360镜介绍

相机360的滤镜特效类别比较多,每一类别又分为不同的特效。

其最主要的特点是它具有实时拍照滤镜功能,且在关闭重新进入后可记忆之前选择的滤镜。

缺点是滤镜效果一般,而且选择滤镜的交互比较复杂,不好 *** 作。

2、魔幻时刻相机滤镜介绍(静态滤镜)

魔幻时刻相机Magic Hour是一款从iOS移植过来的优秀拍照软件。

从其滤镜管理和滤镜库的丰富程度就可以看出这款相机的偏重点了!具有大量的滤镜效果且支持下载。滤镜管理页面很“整洁”,易 *** 作。

三、图片美化滤镜

在图片美化界,美图秀秀是当之无愧的NO.1,其滤镜效果按照tab页的方式分为几类供选择, *** 作非常直观,且每一种特效都会有非常漂亮的效果。

Pixlr-0-matic,这款图片处理工具的滤镜不管从UI设计来讲还是从交互来讲都非常赞,而且它的滤镜还有增加光影效果、色相效果等功能,美化照片能力超强。

四、社交分享滤镜

社交应用也越来越注重图片分享时的滤镜功能。

腾讯微博的滤镜效果如图,交互简洁,清爽,滤镜效果很佳,一推出便得到广泛应用和赞扬。

Path是得到普遍认可的优秀产品,包括其滤镜效果。

简洁是社交分享滤镜的最主要特点,path的滤镜也承袭了这一风格,且滤镜效果很佳。

五、总结

1、采用实时拍照滤镜,在成相的同时可以使用户看到自己想要的照片效果。

2、滤镜种类不宜过多,把握关键的最受用户喜欢的滤镜效果,比如:素描、油画、炫彩、老照片等经典效果。

3、追求高质量滤镜效果,我们要让每一个滤镜都能够使照片变得更加漂亮,而不是鸡肋效果。

4、交互上尽量简洁,一目了然,避免多重选择和切换。

上一章加载图片的过程,在这里就不做赘述。

之前我们通过YUV数据格式的处理知道,只要保留Y的数据,就是灰度的图片。但是OpenGL中处理的是RGB格式的数据,我们要如何去取得灰度图呢?

我们可以通过公式,计算出新的RGB值,就是灰度的图片了。

我们的目标已经确定。下面我们需要将片段着色器上的每个像素的RGB值,通过上面的公式计算,装换成我们的灰度值。

根据上面的思路,我们需要去改片元着色器。 texture_fragment_shader.glsl

对比之前的,需要是有如下的修改点:

按照之前的想法,我们需要将我们的公式中的系数传递进入,就可以完成我们的 *** 作了。基于之前的认识,我们知道传递我们的属性 uniform 给OpenGL的都是通过创建数组,绑定属性,这一套流程。

与上面的黑白色的处理相似,冷色调的处理就是单一增加蓝色通道的值,暖色调的处理可以增加红绿通道的值。

不管是冷色还是暖色。每个像素的颜色都和我们传入的色值相加,产生偏置之后的颜色。同时还要确保颜色的值合法。如果超过最大,或者小于最小,就用极限值表示。

还是之前的套路。

红黄通道增加的结果

蓝色通道增加的结果

图片模糊处理相对上面的色调处理稍微复杂一点,通常图片模糊处理是采集周边多个点,

然后利用这些点的色彩和这个点自身的色彩进行计算,得到一个新的色彩值作为目标色彩。

模糊处理有很多算法,类似高斯模糊、径向模糊等等。

最常用的还是高斯模糊。先看一下高斯模糊的原理。

使用正态分布作为权重分配模式,对周围像素取平均值的方式,就是高斯模糊。

在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。

计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。

二维高斯函数:

有了这个函数 ,就可以计算每个点的权重了。

为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则 模糊半径为1 的权重矩阵,权重之和等于1,得到最终的权重矩阵。

对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

如果一个点处于边界,周边没有足够的点,怎么办?

一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

上面着色器。我们是计算好了卷积核,直接在 shader 内写死应用的。

这一小节的内容耗时比较长。其实就是利用OpenGL的shader对图像进行简单的滤镜处理。

从这节我们学习到

下一章,会回到Android的内容。将OpenGl和Camera结合在一起。通过OpenGl来显示一个预览的画面。

突然发现 下午无事可干了,心里慌得狠,总想找点事儿事情做。初学Android,也是初学OpenGLES,想起自己的许多经验都是这个平台给予的,今天在这里也分享下一段自己整合的代码,如何使用OpenglES在android显示摄像头的滤镜效果,先贴出一篇前辈的帖子,主要用到了在Shader上yuv转RGB的显示。http://blog.csdn.NET/eastlhu/article/details/9382431


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11567490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存