GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架
Logo
项目介绍:
GPUImage是Brad Larson在github托管的开源项目。
GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜; 基于GPU的图像加速,因此可以加速对实时摄像头视频、电影以及image的滤镜和其它效果处理,并且能够自定义图像滤镜。另外, GPUImage支持ARC。
使用GPUImage处理图片比Core Image更简单,只需要将过滤器赋给图片对象即可,不用考虑context或者设备等其他问题。GPUImage提供了除高斯模糊外的其他几种不同效果的模糊,虽然Core Image也提供了几种模糊效果,但目前在iOS上能用的就只有高斯模糊,而GPUImage可用的有FastBlur, GaussianBlur, GaussianSelectiveBlur 和 BoxBlur。此外,作为开源框架的GPUImage还支持自定义的过滤器。
开发语言:Objective-C
License:
BSD 3-clause "New" or "Revised" License
链接:
项目主页: http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework
项目托管地址:
- GitRepository: git://github.com/BradLarson/GPUImage.git
- github项目地址: https://github.com/BradLarson/GPUImage
- CODE镜像地址: https://code.csdn.net/mobiledevelopOS/GPUImage
附录
GPUImage是现在做滤镜最主流的开源框架,没有之一。作者BradLarson基于openGL对图片处理单元进行封装,提供出GPUImageFilter基类,配合shader,常用滤镜都拿下不是问题。
下面大致讲解下GPUImage里的一些基本概念,为了表达方便。已经知道请跳过
GPUImage中的几个概念
⁃ output为输出源
⁃ intput为输入源
⁃ filter为滤镜
所以一个完整的滤镜处理流程是这样的: output+X+input,X就是滤镜组(1+个滤镜)。GPUImage为了方便,新版本中提供了GPUImageFilterPipeline 这个东东,方便用户使用多个滤镜组合,不用担心前后的链式逻辑。
GPUImage作者将图片滤镜处理和动态滤镜是分开了的,动态滤镜是按照上面那个流程,但图片处理却是以(output+filter)*X + input这种逻辑。如果处理一张图片的效果需要用到多个滤镜组合,用一个滤镜生成一张图片output,然后传给下一个滤镜处理,这个过程中如果滤镜叠加次数比较多,或者这个滤镜效果被调用多次,这样消耗的内存是贴别大的,每个滤镜处理后导出的图片output都存在内存中,如果原图特别大,那么恭喜。。估计内存要爆了。
我在做滤镜app的时候,都是以output+X+input这种模式来处理的,这样代码逻辑单一,效率高,吃内存也没那么多。看了源码知道output +X+ input ,当X为多个时,上个滤镜n处理得到的纹理,还存在GPU显存中,GPU直接将这张纹理传给了n+1作为其output,这样整个滤镜流程下来,只有一张纹理内存的占用。
以这条线来走,过程中基本就没遇到什么问题,只是代码结构设计和封装耗时。最后滤镜模块做完实用到项目里,发现滤镜模块调用完了以后,内存上去了下不来,我遇到了这问题时,反复检查,所有GPUImage相关元素都已经释放了,那么增加的内存是哪儿来的呢?后来想到了显存,arc环境下,只负责回收oc对象的内存,显存自然需要GPUImage使用者自己来回收,这样也就容易了,翻GPUImage的api,找到了
GPUImageContext中有个framebufferCache ,就是它了
[[GPUImageContextsharedImageProcessingContext].framebufferCachepurgeAllUnassignedFramebuffers]。
GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架的更多相关文章
- 自动化测试: sikuli,一个基于界面图像的gui测试框架
http://www.sikuli.org/ license: MIT script language: Python 下面是他的一个hello world的例子,看看也挺有意思的. 开源的世界里有很 ...
- 推荐一个 基于 WebSocket 和 Redis 的 即时通信 开源项目
项目地址 : https://github.com/2881099/im 大家可以和 SignalR 比较看看 , 如何 ? ^^ ^^ ^^ 这是一个 网友 写的 , 他还写了 ...
- 基于SURF特征的图像与视频拼接技术的研究和实现(一)
基于SURF特征的图像与视频拼接技术的研究和实现(一) 一直有计划研究实时图像拼接,但是直到最近拜读西电2013年张亚娟的<基于SURF特征的图像与视频拼接技术的研究和实现>,条 ...
- 基于Xilinx FPGA的视频图像采集系统
本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...
- 在Ubuntu上部署一个基于webrtc的多人视频聊天服务
最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...
- 基于GPU的图像处理平台
基于GPU的图像处理平台 1. (309)英伟达推Jetson TX1 GPU模块力推人工智能 1.1 产品概述 Jetson TX1 GPU模块,主要针对近年来蓬勃发展的人工智能市场,包括无人机. ...
- 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍
0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...
- 10分钟内基于gpu的目标检测
10分钟内基于gpu的目标检测 Object Detection on GPUs in 10 Minutes 目标检测仍然是自动驾驶和智能视频分析等应用的主要驱动力.目标检测应用程序需要使用大量数据集 ...
- 基于GPU的高分一号影像正射校正的设计与实现
一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...
随机推荐
- oracle 01578
http://blog.itpub.net/7728585/viewspace-670597/ http://www.2cto.com/database/201208/149056.html http ...
- easyUI Tab href,content差别
easyUI的Tab面板是继承了panel Tab中js的两种使用方法: 说明:jsp主页面加入一个id为tab的div,要引入easyUI的相关js.css <div data-option ...
- js插件---video.js如何使用
js插件---video.js如何使用 一.总结 一句话总结:还是要去官方网站去看英文文档.快点把英语学好啊. 1.如何快速使用这些插件(比如video.js)? 直接百度这些js如何使用就可以了,这 ...
- CentOS 7.0yum安装MySQL
CentOS 7.0yum安装MySQL 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noar ...
- TensorFlow的学习
1.先判断python的版本(因为有些python版本自带pip,可以参考我写的对pip的认识的博客文章),选择是否安装pip,然后安装更新tensorflow如:sudo pip install - ...
- POJ 1904 思路题
思路: 思路题 题目诡异地给了一组可行匹配 肯定有用啊-. 就把那组可行的解 女向男连一条有向边 如果男喜欢女 男向女连一条有向边 跑一边Tarjan就行了 (这个时候 环里的都能选 "增广 ...
- JOISC 2018 Day 2 最差记者3
JOISC 2018 Day 2 最差记者3 题意: 数轴上有\(N\)个选手和一个旗手,旗手在位置\(0\)<第\(i\)人的位置为\(-i\),每个选手有一个参数\(D_i\).旗手每单 ...
- 【翻译自mos文章】OGG的集成捕捉模式支持Oracle database标准版么?
OGG的集成捕捉模式支持Oracle database标准版么? 来源于: Does OGG 11.2.1 Integrated Capture Work with Oracle Database S ...
- AsyncTask源代码翻译
前言: /** <p>AsyncTask enables proper and easy use of the UI thread. This class allows to perfor ...
- mysql 不能启动的两种错误提示及解决方法
在linux系统中安装mysql服务器详细步骤并解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw ...