首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android OpenGL 实现“人像背景虚化”效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。...VIVO 手机人像模式效果 人像模式的一般实现原理是,利用双摄系统获取景深信息,并通过深度传感器和图像分割技术准确分离主题与背景,随后应用人像增强处理和背景虚化算法,例如美颜、肤色优化以及基于深度信息的虚化等...VideoMatting Demo:https://github.com/githubhaohao/AndroidVideoMatting 接下来,本文将教您如何利用人像分割和 OpenGL 的滤镜来实现人像背景虚化效果...照例先上效果图,OpenGL 实现的“人像背景虚化”效果 实现原理 “人像背景虚化”效果实现,首先获取到人像的 mask 图,然后基于这个 mask 图对人像进行保护,对背景做一些模糊(虚化)和一些高光的...景深信息 如果我们拿到的 mask 图包含了景深信息的话,我们还可以进行更加细致的处理,比如光斑的近大远小,虚化效果的层次感,会更加接近手机人像模式成片的效果。

11910
您找到你想要的搜索结果了吗?
是的
没有找到

Android 开发 - 对图片进行虚化(毛玻璃效果,模糊)

anroid-image-blur 描述:一个android 下的对图片进行模糊的辅助类库 作者:张云飞vir Github地址 https://github.com/vir56k/anroid-image-blur 名词解释: 虚化...在ios系统中,主系统的启动后的背景就是一个虚化的效果。 给人一种浸入的感觉,背景和内容是有关联的。 介绍 把一个图片 进行虚化生成新的图片。 原图: ? image.png 模糊后: ?...//缩放并显示 Bitmap newImg = BlurUtil.doBlur(img1, 20, 10); 通过 BlurUtil 的 doBlur方法 出入一个 位图bitmap,该方法返回一个 虚化...参数: 第一个参数 img1, 是原始的位图图像, 第二个参数 20 , 是缩放的大小,这个数字约大,虚化程度越高 第三个参数 10, 虚化质量,这个数字约大,虚化程度越高...返回值: 返回一个 虚化(模糊)后的位图

2.6K00

一种快速毛玻璃虚化效果实现

可以看出当虚化开始时,虚拟机开始不断进行内存回收,包括把所有软引用的内存回收。然而,仍然导致了内存溢出。 那就意味着我只能虚化小图,这样才能防止内存溢出。...下面,我们从 消耗时间 和占据内存 的角度来进行分析。 Time Consuming 为了分析虚化一张图片所消耗的时间,本文通过同时虚化 100 来获取平均消耗时间。...Memory Consuming 既然时间没问题,那么,主要问题:内存占用就来了,所以我们需要考察生成一张虚化图片所占用的内存。...为了测试对一张图片进行虚化所占用内存的变化,我们改变虚化次数,即修改上面的 loopCount 并观察对内存的变化。其中 scaleRatio = 10,以获得相对较大的内存消耗。...从上面的内存消耗图,可以看出虚化的确会占用一定内存,如果大量的虚化同时发生,则会由于 UI 线程突然加载很多 bitmap 而导致内存抖动。

1.1K30

手机中的计算摄影1——人像模式(双摄虚化)

功能介绍 手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为Bokeh模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。...焦外虚化 为了能够突出主体,在景深范围之外的部分则需要按照光学规律逐渐的模糊。很多人以为只是对背景区域做个简单的高斯模糊就能实现这种效果,然而并非如此。...这包括了画面中每一个像素的虚化程度、以及虚化方式的设计,还需要能够在手机这种计算量有限的平台上高效的实现。我们待会会看到更多技术方面的考量。...2.4 图像渲染 我们刚才讲述的内容总结如下图红框所示,最后一步COC计算得到的结果会送入到图像渲染模块,最终渲染出人像模式下背景虚化的图像。...这个比赛要求算法输入单帧图像,然后通过运算直接输出符合真实美感的背景虚化图像——这要求深度图计算,甚至最终的渲染都直接是在单张图像上进行的,大多数参赛队伍选择了基于深度学习的方案。

1.8K41

内存溢出和内存泄露

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。...内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。...就是分配的内存不足以放下数据项序列,称为内存溢出. 以发生的方式来分类,内存泄漏可以分为4类: 1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。...一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。...隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存

3.9K10

内存篇:JVM内存结构

Java虚拟机规范规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。也就是说堆的内存是一块块拼凑起来的。...所以它是一个“线程私有”的内存区域。此内存区域是唯一一个在JVM规范中没有规定任何OutOfMemoryError情况的区域。 ?...因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。...很多开发人员会把Java内存分为堆内存(Heap)和栈内存(Stack),这种划分的流行只能说明大多数开发人员最关注、与对象内存分配关系最密切的内存区域是这两块,其中所指的“堆”在后面会讲到,而所指的“...元空间存在于本地内存,意味着只要本地内存足够,它不会出现像永久代中“java.lang.OutOfMemoryError: PermGen space”这种错误。

4.2K30

golang 内存分析内存泄漏

内存泄露 内存泄露指的是程序运行过程中已不再使用的内存,没有被释放掉,导致这些内存无法被使用,直到程序结束这些内存才被释放的问题。...基于抽样和它跟踪的是已分配的内存,而不是使用中的内存,(比如有些内存已经分配,看似使用,但实际以及不使用的内存,比如内存泄露的那部分),所以不能使用内存profiling衡量程序总体的内存使用情况。...只能通过heap观察内存的变化,增长与减少,内存主要被哪些代码占用了,程序存在内存问题,这只能说明内存有使用不合理的地方,但并不能说明这是内存泄露。...heap在帮助定位内存泄露原因上贡献的力量微乎其微。能通过heap找到占用内存多的位置,但这个位置通常不一定是内存泄露,就算是内存泄露,也只是内存泄露的结果,并不是真正导致内存泄露的根源。...此外goroutine执行过程中还存在一些变量,如果这些变量指向堆内存中的内存,GC会认为这些内存仍在使用,不会对其进行回收,这些内存谁都无法使用,造成了内存泄露。

8.8K20

内存溢出和内存泄漏

关于内存泄漏和内存溢出这个部分的知识点容易混淆,以下来做一个梳理 内存泄漏: 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。...内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费 ️容易引起内存泄漏的原因(待验证) 1 声明为静态(static...注意事项:内存泄漏的出现主要源于程序编写过程中没有规范化管理所导致,开发人员需要结合内存监测工具来有效监控自己的程序,这样才能尽可能地避免出现这个问题。...内存溢出 内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存 如果虚拟机动态拓展无法申请到足够的内存将会出现...重启电脑或者软件后释放掉一部分内存又可以正常运行该软件或游戏一段时间

3K20

内存泄漏和内存溢出

java内存泄漏和内存溢出 概念 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory; 内存泄露 memory leak,是指程序在申请内存后...,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。...类似于内存上不可用的漏洞....内存泄漏场景 a)创建和应用生命周期一样的单例对象 不正确使用是引起内存泄露的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被...内存溢出参考OOM OOM的几种可能情况 遵循 CC 4.0 BY-SA 版权协议参考

3.2K10

内存溢出和内存泄漏

什么是内存溢出? 通俗的讲就是设备内存不够了。就好比我们的手机,运行内存是4G的,当我们运行了太多的程序时,在运行其他的软件时就会很卡或者提示xx运行停止。 什么是内存泄漏?...内存泄漏就是一些资源利用之后没有得到及时的释放,导致这种垃圾资源占用内存越来越多,导致内存可用资源越来越少。 导致内存溢出的情况有哪些?... 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;  集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;  代码中存在死循环或循环产生过多重复的对象实体;  使用的第三方软件中的...BUG;  启动参数设定的过小; 怎么解决内存泄漏?

3.1K50

聊聊内存屏障_内存栅栏

本文转载自聊聊内存屏障 导语 在之前文章聊聊JMM,说到了内存屏障,内存屏障在Java语言实现一致性内存模型上起到了重要的作用,本文我们一起聊一聊内存屏障 内存屏障是什么 在cpu执行指令的过程中,...来保证单线程程序运行的正确性,同时也提升了CPU的执行效率,合理的利用了CPU等待时间, 在多核CPU的情况下,因为多核CPU上的指令同时执行,如果涉及到共享变量的修改,这种优化会影响多线程运行的正确性,而内存屏障...(memory barrier/memory fence)是硬件层面提供的一系列特殊指令,当CPU处理到这些指定时,会做一些特殊的处理,可以使处理器内的内存状态对其它处理器可见,在不同的平台上支持的内存屏障也会有差异...,又带来了内存重排序和可见性问题。...内存屏障分类与作用 在X86平台提供了几种主要的内存屏障 lfence – 加载屏障 清空无效化队列,根据无效化队列中内容的内存地址,将相应处理器上高速缓存中的缓存条件状态置为I,使后续对该地址的读取时

87830
领券