2018-08-20 iOS GPUImage研究总结

转载:https://blog.csdn.net/xoxo_x/article/details/52695032

Part one: 关于GPUImage这里直接引用官方描述:

The GPUImage framework is a BSD-licensed iOS library that lets you apply GPU-accelerated filters and other effects to images, live camera video, and movies. In comparison to Core Image (part of iOS 5.0), GPUImage allows you to write your own custom filters, supports deployment to iOS 4.0, and has a simpler interface. However, it currently lacks some of the more advanced features of Core Image, such as facial detection.

内容大意为:GPUImage是使用GPU处理图像的、他可以对图片、实时画面、视频进行处理。他允许你自定义滤镜、支持iOS4.0。然而,目前缺乏核心形象的一些更高级的功能,比如面部检测。


GPUImage Official icon
GPUImage的结构图

图片来自: http://blog.csdn.net/qq_29846663/article/details/53707482

美颜基本概念

GPU:(Graphic Processor Unit图形处理单元)手机或者电脑用于图像处理和渲染的硬件

GPU工作原理:CPU指定显示控制器工作,显示控制器根据CPU的控制到指定的地方去取数据和指令, 目前的数据一般是从显存里取,如果显存里存不下,则从内存里取, 内存也放不下,则从硬盘里取,当然也不是内存放不下,而是为了节省内存的话,可以放在硬盘里,然后通过指令控制显示控制器去取。

OpenGL ES:(Open Graphics Library For Embedded(嵌入的) Systems开源嵌入式系统图形处理框架),一套图形与硬件接口,用于把处理好的图片显示到屏幕上。

GPUImage:是一个基于OpenGL ES 2.0图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜,内置120多种滤镜效果,并且能够自定义图像滤镜。

滤镜处理的原理:就是把静态图片或者视频的每一帧进行图形变换再显示出来。它的本质就是像素点的坐标和颜色变化

GPUImage处理画面原理

GPUImage采用链式方式来处理画面,通过addTarget:方法为链条添加每个环节的对象,处理完一个target,就会把上一个环节处理好的图像数据传递下一个target去处理,称为GPUImage处理链。

比如:墨镜原理,从外界传来光线,会经过墨镜过滤,在传给我们的眼睛,就能感受到大白天也是乌黑一片,哈哈。

一般的target可分为两类

中间环节的target, 一般是各种filter, 是GPUImageFilter或者是子类.

最终环节的target, GPUImageView:用于显示到屏幕上, 或者GPUImageMovieWriter:写成视频文件。

GPUImage处理主要分为3个环节

source(视频、图片源) -> filter(滤镜) -> final target (处理后视频、图片)

GPUImaged的Source:都继承GPUImageOutput的子类,作为GPUImage的数据源,就好比外界的光线,作为眼睛的输出源

GPUImageVideoCamera:用于实时拍摄视频

GPUImageStillCamera:用于实时拍摄照片

GPUImagePicture:用于处理已经拍摄好的图片,比如png,jpg图片

GPUImageMovie:用于处理已经拍摄好的视频,比如mp4文件

GPUImage的filter:GPUimageFilter类或者子类,这个类继承自GPUImageOutput,并且遵守GPUImageInput协议,这样既能流进,又能流出,就好比我们的墨镜,光线通过墨镜的处理,最终进入我们眼睛

GPUImage的final target:GPUImageView,GPUImageMovieWriter就好比我们眼睛,最终输入目标。

Part two: 有关GPUImage的研究成果

图像处理之GPUImage图片滤镜 http://blog.csdn.net/xoxo_x/article/details/53507016

图像处理之CPU图片滤镜 

http://blog.csdn.net/xoxo_x/article/details/53518322

图像处理之CoreImage图片滤镜 

http://blog.csdn.net/xoxo_x/article/details/53518529

iOS GPUImage研究序一:内置滤镜: 

http://blog.csdn.net/Xoxo_x/article/details/57082804

iOS GPUImage研究二:捕获图像stillCamera写入相册 

http://blog.csdn.net/Xoxo_x/article/details/57086446

iOS GPUImage研究三:视频采集并添加实时滤镜 

http://blog.csdn.net/xoxo_x/article/details/58357978

iOS GPUImage研究四:为视频文件添加滤镜 

http://blog.csdn.net/Xoxo_x/article/details/58818703

iOS GPUImage研究五:短视频拍摄(滤镜、文件写入) 

http://blog.csdn.net/Xoxo_x/article/details/70198469

iOS GPUImage研究六:为视频添加图片水印 

http://blog.csdn.net/xoxo_x/article/details/71055867

iOS GPUImage研究七:动态相册初探(水印) 

http://blog.csdn.net/xoxo_x/article/details/71076584

将图片保存到本地 

http://blog.csdn.net/xoxo_x/article/details/53517878

基于IM实现直播礼物效果 

http://blog.csdn.net/xoxo_x/article/details/52044388

GPUImage之为视频添加10种原生滤镜 

http://blog.csdn.net/xoxo_x/article/details/52749033

GPUImage–流行的美颜滤镜

GPUImageBeautifyFilter 

http://blog.csdn.net/xoxo_x/article/details/52743107

GPUImage基于OpenGL ES 2.0,比基于CPU的图形和视频处理更快速.

GPUImage把OpenGL ES封装为简洁的Objective-C接口.

Part Three: 有关GPUImage的导入方式

iOS GPUImage研究序二:更简单GPUImage导入方式 

http://blog.csdn.net/xoxo_x/article/details/60323297

Part Four: 相关参考资料

https://github.com/Guikunzhi/BeautifyFaceDemo

已经没办法运行,需要cd 文件夹 pod install

http://download.csdn.net/detail/xoxo_x/9642503

我整理过的,去除不需要的东西2016.09.28

2、 文章不错

http://www.cnblogs.com/salam/p/4980992.html

http://blog.csdn.net/jcp312097937/article/details/45849341

http://www.ios122.com/2015/08/gpuimage/

3、GPUImage中的VideoCamera

http://developer.apple.com/library/ios/samplecode/RosyWriter/RosyWriter.zipApple

官方对视频流的处理,GPUImage中的VideoCamera部分代码就是根据这个写的

4、http://blog.csdn.net/Xoxo_x/article/details/52523466 

我写的不怎么样有时候会蹦,基于coreImage在GPU渲染,图像处理的不好,但能正常运行。

5、http://blog.csdn.net/Xoxo_x/article/details/52523912 coreImage

图片处理,看这个就可以,我也是借鉴别人的,但很全

6、 原文链接:http://nshipster.com/gpuimage/

英文CPU与GPU的比较https://leafduo.com/articles/2013/05/13/gpuimage/ 中文翻译

7、这个也不错哦https://github.com/loyinglin/GPUImage

GPUImage详细解析(一) 

http://url.cn/2FwjqIr

GPUImage详细解析(二) 

http://url.cn/2GsW2qg

GPUImage详细解析(三)- 实时美颜滤镜 

http://url.cn/2F0SKgR

GPUImage详细解析(四)模糊图片处理

 http://url.cn/2GX6JEQ

GPUImage详细解析(五)滤镜视频录制 

http://url.cn/2GHCo71

GPUImage详细解析(六)-用视频做视频水印 

http://url.cn/2JrhR7V

GPUImage详细解析(七)文字水印和动态图像水印 

http://url.cn/2IzRshs 

GPUImage详细解析(八)视频合并混音 

http://url.cn/2DmUYiA

GPUImage详细解析(九)图像的输入输出和滤镜通道 

http://url.cn/2EFjlGp

** 下载官方GPUImage,Github地址:https://github.com/BradLarson/GPUImage

共125个滤镜, 分为四类 

 1、Color adjustments: 31 filters, 颜色处理相关 

 2、Image processing: 40 filters, 图像处理相关. 

 3、Blending modes: 29 filters, 混合模式相关. 

 4、Visual effects: 25 filters, 视觉效果相关.

#import "GPUImageBrightnessFilter.h"                 //亮度

#import "GPUImageExposureFilter.h"                  //曝光

#import "GPUImageContrastFilter.h"                  //对比度

#import "GPUImageSaturationFilter.h"                //饱和度

#import "GPUImageGammaFilter.h"                    //伽马线

#import "GPUImageColorInvertFilter.h"              //反色

#import "GPUImageSepiaFilter.h"                    //褐色(怀旧)

#import "GPUImageLevelsFilter.h"                    //色阶

#import "GPUImageGrayscaleFilter.h"                //灰度

#import "GPUImageHistogramFilter.h"                //色彩直方图,显示在图片上

#import "GPUImageHistogramGenerator.h"              //色彩直方图

#import "GPUImageRGBFilter.h"                      //RGB

#import "GPUImageToneCurveFilter.h"                //色调曲线

#import "GPUImageMonochromeFilter.h"                //单色

#import "GPUImageOpacityFilter.h"                  //不透明度

#import "GPUImageHighlightShadowFilter.h"          //提亮阴影

#import "GPUImageFalseColorFilter.h"                //色彩替换(替换亮部和暗部色彩)

#import "GPUImageHueFilter.h"                      //色度

#import "GPUImageChromaKeyFilter.h"                //色度键

#import "GPUImageWhiteBalanceFilter.h"              //白平横

#import "GPUImageAverageColor.h"                    //像素平均色值

#import "GPUImageSolidColorGenerator.h"            //纯色

#import "GPUImageLuminosity.h"                      //亮度平均

#import "GPUImageAverageLuminanceThresholdFilter.h" //像素色值亮度平均,图像黑白(有类似漫画效果)

#import "GPUImageLookupFilter.h"                    //lookup 色彩调整

#import "GPUImageAmatorkaFilter.h"                  //Amatorka lookup

#import "GPUImageMissEtikateFilter.h"              //MissEtikate lookup

#import "GPUImageSoftEleganceFilter.h"              //SoftElegance lookup

#pragma mark - 图像处理 Handle Image

#import "GPUImageCrosshairGenerator.h"              //十字

#import "GPUImageLineGenerator.h"                  //线条

#import "GPUImageTransformFilter.h"                //形状变化

#import "GPUImageCropFilter.h"                      //剪裁

#import "GPUImageSharpenFilter.h"                  //锐化

#import "GPUImageUnsharpMaskFilter.h"              //反遮罩锐化

//#import "GPUImageFastBlurFilter.h"                  //模糊

#import "GPUImageGaussianBlurFilter.h"              //高斯模糊

#import "GPUImageGaussianSelectiveBlurFilter.h"    //高斯模糊,选择部分清晰

#import "GPUImageBoxBlurFilter.h"                  //盒状模糊

#import "GPUImageTiltShiftFilter.h"                //条纹模糊,中间清晰,上下两端模糊

#import "GPUImageMedianFilter.h"                    //中间值,有种稍微模糊边缘的效果

#import "GPUImageBilateralFilter.h"                //双边模糊

#import "GPUImageErosionFilter.h"                  //侵蚀边缘模糊,变黑白

#import "GPUImageRGBErosionFilter.h"                //RGB侵蚀边缘模糊,有色彩

#import "GPUImageDilationFilter.h"                  //扩展边缘模糊,变黑白

#import "GPUImageRGBDilationFilter.h"              //RGB扩展边缘模糊,有色彩

#import "GPUImageOpeningFilter.h"                  //黑白色调模糊

#import "GPUImageRGBOpeningFilter.h"                //彩色模糊

#import "GPUImageClosingFilter.h"                  //黑白色调模糊,暗色会被提亮

#import "GPUImageRGBClosingFilter.h"                //彩色模糊,暗色会被提亮

#import "GPUImageLanczosResamplingFilter.h"        //Lanczos重取样,模糊效果

#import "GPUImageNonMaximumSuppressionFilter.h"    //非最大抑制,只显示亮度最高的像素,其他为黑

#import "GPUImageThresholdedNonMaximumSuppressionFilter.h" //与上相比,像素丢失更多

#import "GPUImageSobelEdgeDetectionFilter.h"        //Sobel边缘检测算法(白边,黑内容,有点漫画的反色效果)

#import "GPUImageCannyEdgeDetectionFilter.h"        //Canny边缘检测算法(比上更强烈的黑白对比度)

#import "GPUImageThresholdEdgeDetectionFilter.h"    //阈值边缘检测(效果与上差别不大)

#import "GPUImagePrewittEdgeDetectionFilter.h"      //普瑞维特(Prewitt)边缘检测(效果与Sobel差不多,貌似更平滑)

#import "GPUImageXYDerivativeFilter.h"              //XYDerivative边缘检测,画面以蓝色为主,绿色为边缘,带彩色

#import "GPUImageHarrisCornerDetectionFilter.h"    //Harris角点检测,会有绿色小十字显示在图片角点处

#import "GPUImageNobleCornerDetectionFilter.h"      //Noble角点检测,检测点更多

#import "GPUImageShiTomasiFeatureDetectionFilter.h" //ShiTomasi角点检测,与上差别不大

#import "GPUImageMotionDetector.h"                  //动作检测

#import "GPUImageHoughTransformLineDetector.h"      //线条检测

#import "GPUImageParallelCoordinateLineTransformFilter.h" //平行线检测

#import "GPUImageLocalBinaryPatternFilter.h"        //图像黑白化,并有大量噪点

#import "GPUImageLowPassFilter.h"                  //用于图像加亮

#import "GPUImageHighPassFilter.h"                  //图像低于某值时显示为黑

#pragma mark - 视觉效果 Visual Effect

#import "GPUImageSketchFilter.h"                    //素描

#import "GPUImageThresholdSketchFilter.h"          //阀值素描,形成有噪点的素描

#import "GPUImageToonFilter.h"                      //卡通效果(黑色粗线描边)

#import "GPUImageSmoothToonFilter.h"                //相比上面的效果更细腻,上面是粗旷的画风

#import "GPUImageKuwaharaFilter.h"                  //桑原(Kuwahara)滤波,水粉画的模糊效果;处理时间比较长,慎用

#import "GPUImageMosaicFilter.h"                    //黑白马赛克

#import "GPUImagePixellateFilter.h"                //像素化

#import "GPUImagePolarPixellateFilter.h"            //同心圆像素化

#import "GPUImageCrosshatchFilter.h"                //交叉线阴影,形成黑白网状画面

#import "GPUImageColorPackingFilter.h"              //色彩丢失,模糊(类似监控摄像效果)

#import "GPUImageVignetteFilter.h"                  //晕影,形成黑色圆形边缘,突出中间图像的效果

#import "GPUImageSwirlFilter.h"                    //漩涡,中间形成卷曲的画面

#import "GPUImageBulgeDistortionFilter.h"          //凸起失真,鱼眼效果

#import "GPUImagePinchDistortionFilter.h"          //收缩失真,凹面镜

#import "GPUImageStretchDistortionFilter.h"        //伸展失真,哈哈镜

#import "GPUImageGlassSphereFilter.h"              //水晶球效果

#import "GPUImageSphereRefractionFilter.h"          //球形折射,图形倒立

#import "GPUImagePosterizeFilter.h"                //色调分离,形成噪点效果

#import "GPUImageCGAColorspaceFilter.h"            //CGA色彩滤镜,形成黑、浅蓝、紫色块的画面

#import "GPUImagePerlinNoiseFilter.h"              //柏林噪点,花边噪点

#import "GPUImage3x3ConvolutionFilter.h"            //3x3卷积,高亮大色块变黑,加亮边缘、线条等

#import "GPUImageEmbossFilter.h"                    //浮雕效果,带有点3d的感觉

#import "GPUImagePolkaDotFilter.h"                  //像素圆点花样

#import "GPUImageHalftoneFilter.h"                  //点染,图像黑白化,由黑点构成原图的大致图形

#pragma mark - 混合模式 Blend

#import "GPUImageMultiplyBlendFilter.h"            //通常用于创建阴影和深度效果

#import "GPUImageNormalBlendFilter.h"              //正常

#import "GPUImageAlphaBlendFilter.h"                //透明混合,通常用于在背景上应用前景的透明度

#import "GPUImageDissolveBlendFilter.h"            //溶解

#import "GPUImageOverlayBlendFilter.h"              //叠加,通常用于创建阴影效果

#import "GPUImageDarkenBlendFilter.h"              //加深混合,通常用于重叠类型

#import "GPUImageLightenBlendFilter.h"              //减淡混合,通常用于重叠类型

#import "GPUImageSourceOverBlendFilter.h"          //源混合

#import "GPUImageColorBurnBlendFilter.h"            //色彩加深混合

#import "GPUImageColorDodgeBlendFilter.h"          //色彩减淡混合

#import "GPUImageScreenBlendFilter.h"              //屏幕包裹,通常用于创建亮点和镜头眩光

#import "GPUImageExclusionBlendFilter.h"            //排除混合

#import "GPUImageDifferenceBlendFilter.h"          //差异混合,通常用于创建更多变动的颜色

#import "GPUImageSubtractBlendFilter.h"            //差值混合,通常用于创建两个图像之间的动画变暗模糊效果

#import "GPUImageHardLightBlendFilter.h"            //强光混合,通常用于创建阴影效果

#import "GPUImageSoftLightBlendFilter.h"            //柔光混合

#import "GPUImageChromaKeyBlendFilter.h"            //色度键混合

#import "GPUImageMaskFilter.h"                      //遮罩混合

#import "GPUImageHazeFilter.h"                      //朦胧加暗

#import "GPUImageLuminanceThresholdFilter.h"        //亮度阈

#import "GPUImageAdaptiveThresholdFilter.h"        //自适应阈值

#import "GPUImageAddBlendFilter.h"                  //通常用于创建两个图像之间的动画变亮模糊效果

#import "GPUImageDivideBlendFilter.h"              //通常用于创建两个图像之间的动画变暗模糊效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容