轉(zhuǎn)載:https://blog.csdn.net/xoxo_x/article/details/52695032
Part one: 關(guān)于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.
內(nèi)容大意為:GPUImage是使用GPU處理圖像的、他可以對(duì)圖片、實(shí)時(shí)畫面、視頻進(jìn)行處理。他允許你自定義濾鏡、支持iOS4.0。然而,目前缺乏核心形象的一些更高級(jí)的功能,比如面部檢測(cè)。
圖片來(lái)自: http://blog.csdn.net/qq_29846663/article/details/53707482
美顏基本概念
GPU:(Graphic Processor Unit圖形處理單元)手機(jī)或者電腦用于圖像處理和渲染的硬件
GPU工作原理:CPU指定顯示控制器工作,顯示控制器根據(jù)CPU的控制到指定的地方去取數(shù)據(jù)和指令, 目前的數(shù)據(jù)一般是從顯存里取,如果顯存里存不下,則從內(nèi)存里取, 內(nèi)存也放不下,則從硬盤里取,當(dāng)然也不是內(nèi)存放不下,而是為了節(jié)省內(nèi)存的話,可以放在硬盤里,然后通過(guò)指令控制顯示控制器去取。
OpenGL ES:(Open Graphics Library For Embedded(嵌入的) Systems開(kāi)源嵌入式系統(tǒng)圖形處理框架),一套圖形與硬件接口,用于把處理好的圖片顯示到屏幕上。
GPUImage:是一個(gè)基于OpenGL ES 2.0圖像和視頻處理的開(kāi)源iOS框架,提供各種各樣的圖像處理濾鏡,并且支持照相機(jī)和攝像機(jī)的實(shí)時(shí)濾鏡,內(nèi)置120多種濾鏡效果,并且能夠自定義圖像濾鏡。
濾鏡處理的原理:就是把靜態(tài)圖片或者視頻的每一幀進(jìn)行圖形變換再顯示出來(lái)。它的本質(zhì)就是像素點(diǎn)的坐標(biāo)和顏色變化
GPUImage采用鏈?zhǔn)椒绞絹?lái)處理畫面,通過(guò)addTarget:方法為鏈條添加每個(gè)環(huán)節(jié)的對(duì)象,處理完一個(gè)target,就會(huì)把上一個(gè)環(huán)節(jié)處理好的圖像數(shù)據(jù)傳遞下一個(gè)target去處理,稱為GPUImage處理鏈。
比如:墨鏡原理,從外界傳來(lái)光線,會(huì)經(jīng)過(guò)墨鏡過(guò)濾,在傳給我們的眼睛,就能感受到大白天也是烏黑一片,哈哈。
一般的target可分為兩類
中間環(huán)節(jié)的target, 一般是各種filter, 是GPUImageFilter或者是子類.
最終環(huán)節(jié)的target, GPUImageView:用于顯示到屏幕上, 或者GPUImageMovieWriter:寫成視頻文件。
GPUImage處理主要分為3個(gè)環(huán)節(jié)
source(視頻、圖片源) -> filter(濾鏡) -> final target (處理后視頻、圖片)
GPUImaged的Source:都繼承GPUImageOutput的子類,作為GPUImage的數(shù)據(jù)源,就好比外界的光線,作為眼睛的輸出源
GPUImageVideoCamera:用于實(shí)時(shí)拍攝視頻
GPUImageStillCamera:用于實(shí)時(shí)拍攝照片
GPUImagePicture:用于處理已經(jīng)拍攝好的圖片,比如png,jpg圖片
GPUImageMovie:用于處理已經(jīng)拍攝好的視頻,比如mp4文件
GPUImage的filter:GPUimageFilter類或者子類,這個(gè)類繼承自GPUImageOutput,并且遵守GPUImageInput協(xié)議,這樣既能流進(jìn),又能流出,就好比我們的墨鏡,光線通過(guò)墨鏡的處理,最終進(jìn)入我們眼睛
GPUImage的final target:GPUImageView,GPUImageMovieWriter就好比我們眼睛,最終輸入目標(biāo)。
Part two: 有關(guān)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研究序一:內(nèi)置濾鏡:?
http://blog.csdn.net/Xoxo_x/article/details/57082804
iOS GPUImage研究二:捕獲圖像stillCamera寫入相冊(cè)?
http://blog.csdn.net/Xoxo_x/article/details/57086446
iOS GPUImage研究三:視頻采集并添加實(shí)時(shí)濾鏡?
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研究七:動(dòng)態(tài)相冊(cè)初探(水印)?
http://blog.csdn.net/xoxo_x/article/details/71076584
將圖片保存到本地?
http://blog.csdn.net/xoxo_x/article/details/53517878
基于IM實(shí)現(xiàn)直播禮物效果?
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封裝為簡(jiǎn)潔的Objective-C接口.
Part Three: 有關(guān)GPUImage的導(dǎo)入方式
iOS GPUImage研究序二:更簡(jiǎn)單GPUImage導(dǎo)入方式?
http://blog.csdn.net/xoxo_x/article/details/60323297
Part Four: 相關(guān)參考資料
https://github.com/Guikunzhi/BeautifyFaceDemo
已經(jīng)沒(méi)辦法運(yùn)行,需要cd 文件夾 pod install
http://download.csdn.net/detail/xoxo_x/9642503
我整理過(guò)的,去除不需要的東西2016.09.28
2、 文章不錯(cuò)
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
官方對(duì)視頻流的處理,GPUImage中的VideoCamera部分代碼就是根據(jù)這個(gè)寫的
4、http://blog.csdn.net/Xoxo_x/article/details/52523466?
我寫的不怎么樣有時(shí)候會(huì)蹦,基于coreImage在GPU渲染,圖像處理的不好,但能正常運(yùn)行。
5、http://blog.csdn.net/Xoxo_x/article/details/52523912 coreImage
圖片處理,看這個(gè)就可以,我也是借鑒別人的,但很全
6、 原文鏈接:http://nshipster.com/gpuimage/
英文CPU與GPU的比較https://leafduo.com/articles/2013/05/13/gpuimage/ 中文翻譯
7、這個(gè)也不錯(cuò)哦https://github.com/loyinglin/GPUImage
GPUImage詳細(xì)解析(一)?
GPUImage詳細(xì)解析(二)?
GPUImage詳細(xì)解析(三)- 實(shí)時(shí)美顏濾鏡?
GPUImage詳細(xì)解析(四)模糊圖片處理
GPUImage詳細(xì)解析(五)濾鏡視頻錄制?
GPUImage詳細(xì)解析(六)-用視頻做視頻水印?
GPUImage詳細(xì)解析(七)文字水印和動(dòng)態(tài)圖像水印?
GPUImage詳細(xì)解析(八)視頻合并混音?
GPUImage詳細(xì)解析(九)圖像的輸入輸出和濾鏡通道?
** 下載官方GPUImage,Github地址:https://github.com/BradLarson/GPUImage
共125個(gè)濾鏡, 分為四類?
?1、Color adjustments: 31 filters, 顏色處理相關(guān)?
?2、Image processing: 40 filters, 圖像處理相關(guān).?
?3、Blending modes: 29 filters, 混合模式相關(guān).?
?4、Visual effects: 25 filters, 視覺(jué)效果相關(guān).
#import "GPUImageBrightnessFilter.h"? ? ? ? ? ? ? ? ?//亮度
#import "GPUImageExposureFilter.h"? ? ? ? ? ? ? ? ? //曝光
#import "GPUImageContrastFilter.h"? ? ? ? ? ? ? ? ? //對(duì)比度
#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"? ? ? ? ? ? ? ? //色調(diào)曲線
#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 色彩調(diào)整
#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"? ? ? ? ? ? ? ? ? //擴(kuò)展邊緣模糊,變黑白
#import "GPUImageRGBDilationFilter.h"? ? ? ? ? ? ? //RGB擴(kuò)展邊緣模糊,有色彩
#import "GPUImageOpeningFilter.h"? ? ? ? ? ? ? ? ? //黑白色調(diào)模糊
#import "GPUImageRGBOpeningFilter.h"? ? ? ? ? ? ? ? //彩色模糊
#import "GPUImageClosingFilter.h"? ? ? ? ? ? ? ? ? //黑白色調(diào)模糊,暗色會(huì)被提亮
#import "GPUImageRGBClosingFilter.h"? ? ? ? ? ? ? ? //彩色模糊,暗色會(huì)被提亮
#import "GPUImageLanczosResamplingFilter.h"? ? ? ? //Lanczos重取樣,模糊效果
#import "GPUImageNonMaximumSuppressionFilter.h"? ? //非最大抑制,只顯示亮度最高的像素,其他為黑
#import "GPUImageThresholdedNonMaximumSuppressionFilter.h" //與上相比,像素丟失更多
#import "GPUImageSobelEdgeDetectionFilter.h"? ? ? ? //Sobel邊緣檢測(cè)算法(白邊,黑內(nèi)容,有點(diǎn)漫畫的反色效果)
#import "GPUImageCannyEdgeDetectionFilter.h"? ? ? ? //Canny邊緣檢測(cè)算法(比上更強(qiáng)烈的黑白對(duì)比度)
#import "GPUImageThresholdEdgeDetectionFilter.h"? ? //閾值邊緣檢測(cè)(效果與上差別不大)
#import "GPUImagePrewittEdgeDetectionFilter.h"? ? ? //普瑞維特(Prewitt)邊緣檢測(cè)(效果與Sobel差不多,貌似更平滑)
#import "GPUImageXYDerivativeFilter.h"? ? ? ? ? ? ? //XYDerivative邊緣檢測(cè),畫面以藍(lán)色為主,綠色為邊緣,帶彩色
#import "GPUImageHarrisCornerDetectionFilter.h"? ? //Harris角點(diǎn)檢測(cè),會(huì)有綠色小十字顯示在圖片角點(diǎn)處
#import "GPUImageNobleCornerDetectionFilter.h"? ? ? //Noble角點(diǎn)檢測(cè),檢測(cè)點(diǎn)更多
#import "GPUImageShiTomasiFeatureDetectionFilter.h" //ShiTomasi角點(diǎn)檢測(cè),與上差別不大
#import "GPUImageMotionDetector.h"? ? ? ? ? ? ? ? ? //動(dòng)作檢測(cè)
#import "GPUImageHoughTransformLineDetector.h"? ? ? //線條檢測(cè)
#import "GPUImageParallelCoordinateLineTransformFilter.h" //平行線檢測(cè)
#import "GPUImageLocalBinaryPatternFilter.h"? ? ? ? //圖像黑白化,并有大量噪點(diǎn)
#import "GPUImageLowPassFilter.h"? ? ? ? ? ? ? ? ? //用于圖像加亮
#import "GPUImageHighPassFilter.h"? ? ? ? ? ? ? ? ? //圖像低于某值時(shí)顯示為黑
#pragma mark - 視覺(jué)效果 Visual Effect
#import "GPUImageSketchFilter.h"? ? ? ? ? ? ? ? ? ? //素描
#import "GPUImageThresholdSketchFilter.h"? ? ? ? ? //閥值素描,形成有噪點(diǎn)的素描
#import "GPUImageToonFilter.h"? ? ? ? ? ? ? ? ? ? ? //卡通效果(黑色粗線描邊)
#import "GPUImageSmoothToonFilter.h"? ? ? ? ? ? ? ? //相比上面的效果更細(xì)膩,上面是粗曠的畫風(fēng)
#import "GPUImageKuwaharaFilter.h"? ? ? ? ? ? ? ? ? //桑原(Kuwahara)濾波,水粉畫的模糊效果;處理時(shí)間比較長(zhǎng),慎用
#import "GPUImageMosaicFilter.h"? ? ? ? ? ? ? ? ? ? //黑白馬賽克
#import "GPUImagePixellateFilter.h"? ? ? ? ? ? ? ? //像素化
#import "GPUImagePolarPixellateFilter.h"? ? ? ? ? ? //同心圓像素化
#import "GPUImageCrosshatchFilter.h"? ? ? ? ? ? ? ? //交叉線陰影,形成黑白網(wǎng)狀畫面
#import "GPUImageColorPackingFilter.h"? ? ? ? ? ? ? //色彩丟失,模糊(類似監(jiān)控?cái)z像效果)
#import "GPUImageVignetteFilter.h"? ? ? ? ? ? ? ? ? //暈影,形成黑色圓形邊緣,突出中間圖像的效果
#import "GPUImageSwirlFilter.h"? ? ? ? ? ? ? ? ? ? //漩渦,中間形成卷曲的畫面
#import "GPUImageBulgeDistortionFilter.h"? ? ? ? ? //凸起失真,魚眼效果
#import "GPUImagePinchDistortionFilter.h"? ? ? ? ? //收縮失真,凹面鏡
#import "GPUImageStretchDistortionFilter.h"? ? ? ? //伸展失真,哈哈鏡
#import "GPUImageGlassSphereFilter.h"? ? ? ? ? ? ? //水晶球效果
#import "GPUImageSphereRefractionFilter.h"? ? ? ? ? //球形折射,圖形倒立
#import "GPUImagePosterizeFilter.h"? ? ? ? ? ? ? ? //色調(diào)分離,形成噪點(diǎn)效果
#import "GPUImageCGAColorspaceFilter.h"? ? ? ? ? ? //CGA色彩濾鏡,形成黑、淺藍(lán)、紫色塊的畫面
#import "GPUImagePerlinNoiseFilter.h"? ? ? ? ? ? ? //柏林噪點(diǎn),花邊噪點(diǎn)
#import "GPUImage3x3ConvolutionFilter.h"? ? ? ? ? ? //3x3卷積,高亮大色塊變黑,加亮邊緣、線條等
#import "GPUImageEmbossFilter.h"? ? ? ? ? ? ? ? ? ? //浮雕效果,帶有點(diǎn)3d的感覺(jué)
#import "GPUImagePolkaDotFilter.h"? ? ? ? ? ? ? ? ? //像素圓點(diǎn)花樣
#import "GPUImageHalftoneFilter.h"? ? ? ? ? ? ? ? ? //點(diǎn)染,圖像黑白化,由黑點(diǎn)構(gòu)成原圖的大致圖形
#pragma mark - 混合模式 Blend
#import "GPUImageMultiplyBlendFilter.h"? ? ? ? ? ? //通常用于創(chuàng)建陰影和深度效果
#import "GPUImageNormalBlendFilter.h"? ? ? ? ? ? ? //正常
#import "GPUImageAlphaBlendFilter.h"? ? ? ? ? ? ? ? //透明混合,通常用于在背景上應(yīng)用前景的透明度
#import "GPUImageDissolveBlendFilter.h"? ? ? ? ? ? //溶解
#import "GPUImageOverlayBlendFilter.h"? ? ? ? ? ? ? //疊加,通常用于創(chuàng)建陰影效果
#import "GPUImageDarkenBlendFilter.h"? ? ? ? ? ? ? //加深混合,通常用于重疊類型
#import "GPUImageLightenBlendFilter.h"? ? ? ? ? ? ? //減淡混合,通常用于重疊類型
#import "GPUImageSourceOverBlendFilter.h"? ? ? ? ? //源混合
#import "GPUImageColorBurnBlendFilter.h"? ? ? ? ? ? //色彩加深混合
#import "GPUImageColorDodgeBlendFilter.h"? ? ? ? ? //色彩減淡混合
#import "GPUImageScreenBlendFilter.h"? ? ? ? ? ? ? //屏幕包裹,通常用于創(chuàng)建亮點(diǎn)和鏡頭眩光
#import "GPUImageExclusionBlendFilter.h"? ? ? ? ? ? //排除混合
#import "GPUImageDifferenceBlendFilter.h"? ? ? ? ? //差異混合,通常用于創(chuàng)建更多變動(dòng)的顏色
#import "GPUImageSubtractBlendFilter.h"? ? ? ? ? ? //差值混合,通常用于創(chuàng)建兩個(gè)圖像之間的動(dòng)畫變暗模糊效果
#import "GPUImageHardLightBlendFilter.h"? ? ? ? ? ? //強(qiáng)光混合,通常用于創(chuàng)建陰影效果
#import "GPUImageSoftLightBlendFilter.h"? ? ? ? ? ? //柔光混合
#import "GPUImageChromaKeyBlendFilter.h"? ? ? ? ? ? //色度鍵混合
#import "GPUImageMaskFilter.h"? ? ? ? ? ? ? ? ? ? ? //遮罩混合
#import "GPUImageHazeFilter.h"? ? ? ? ? ? ? ? ? ? ? //朦朧加暗
#import "GPUImageLuminanceThresholdFilter.h"? ? ? ? //亮度閾
#import "GPUImageAdaptiveThresholdFilter.h"? ? ? ? //自適應(yīng)閾值
#import "GPUImageAddBlendFilter.h"? ? ? ? ? ? ? ? ? //通常用于創(chuàng)建兩個(gè)圖像之間的動(dòng)畫變亮模糊效果
#import "GPUImageDivideBlendFilter.h"? ? ? ? ? ? ? //通常用于創(chuàng)建兩個(gè)圖像之間的動(dòng)畫變暗模糊效果