GPUImage的简单使用
GPUImage 是一个开源的图像处理库,提供了非常多的滤镜效果来加工图片或视频。GPUImage 并不像一般的第三方库可以直接拖入到工程中使用,而是需要先在本地编译,然后将编译后的文件拖入到工程中使用。配置步骤如下:
1. 首先下载GPUImage https://github.com/BradLarson/GPUImage
2. 把framework下的GPUImage.xcodeproj 拖到你的Xcode project
3. 在app的target dependencies设置里面添加GPUImage作为Target Dependency
4. 在build phase的Link Binary With Libraries, 把libGPUImage.a加进来.
5. 添加下面这些系统framework:如果已经加了,可以不再加,
CoreMedia
CoreVideo
OpenGLES
AVFoundation
QuartzCore
6. 头文件搜索路径: project's build settings, 把GPUImage的source和source下的iOS目录加到搜索路径里, 使用相对路径和递归.一定要使用递归,即将尾部的non-recursive选项改为recursive。
7. 包含下面这个头文件:#import "GPUImage.h"
一个示例代码:
要记得
#import "GPUImage.h"
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 4 UIImage *inputImage = [UIImage imageNamed:@"zzy"]; 5 //创建一个亮度的滤镜 6 // GPUImageBrightnessFilter *passthroughFilter = [[GPUImageBrightnessFilter alloc] init]; 7 // passthroughFilter.brightness = -0.5f; 8 // //设置要渲染的区域 9 // [passthroughFilter forceProcessingAtSize:inputImage.size]; 10 // [passthroughFilter useNextFrameForImageCapture]; 11 // //获取数据源 12 // GPUImagePicture *stillImageSource = [[GPUImagePicture alloc]initWithImage:inputImage]; 13 // //添加上滤镜 14 // [stillImageSource addTarget:passthroughFilter]; 15 // //开始渲染 16 // [stillImageSource processImage]; 17 // //获取渲染后的图片 18 // UIImage *newImage = [passthroughFilter imageFromCurrentFramebuffer]; 19 // //加载出来 20 // UIImageView *imageView = [[UIImageView alloc] initWithImage:newImage]; 21 // imageView.frame = CGRectMake(0,0,inputImage.size.width ,inputImage.size.height); 22 // [self.view addSubview:imageView]; 23 24 25 //GPUImageStretchDistortionFilter *disFilter =[[GPUImageStretchDistortionFilter alloc] init]; 26 //GPUImageBulgeDistortionFilter *disFilter = [[GPUImageBulgeDistortionFilter alloc] init]; 27 //GPUImagePinchDistortionFilter *disFilter = [[GPUImagePinchDistortionFilter alloc] init]; 28 //GPUImageGlassSphereFilter *disFilter = [[GPUImageGlassSphereFilter alloc] init]; 29 //GPUImageSphereRefractionFilter *disFilter = [[GPUImageSphereRefractionFilter alloc] init]; 30 //GPUImageToonFilter *disFilter = [[GPUImageToonFilter alloc] init]; 31 GPUImageVignetteFilter *disFilter = [[GPUImageVignetteFilter alloc] init]; 32 //设置要渲染的区域 33 [disFilter forceProcessingAtSize:inputImage.size]; 34 [disFilter useNextFrameForImageCapture]; 35 //获取数据源 36 GPUImagePicture *stillImageSource = [[GPUImagePicture alloc]initWithImage:inputImage]; 37 //添加上滤镜 38 [stillImageSource addTarget:disFilter]; 39 //开始渲染 40 [stillImageSource processImage]; 41 //获取渲染后的图片 42 UIImage *newImage = [disFilter imageFromCurrentFramebuffer]; 43 //加载出来 44 UIImageView *imageView = [[UIImageView alloc] initWithImage:newImage]; 45 imageView.frame = CGRectMake(50,50,inputImage.size.width ,inputImage.size.height); 46 [self.view addSubview:imageView]; 47 }
#import "GLProgram.h"
#import "GPUImageDivideBlendFilter.h" //通常用于创建两个图像之间的动画变暗模糊效果
GPUImageBrightnessFilter:调整图像的亮度
GPUImageExposureFilter:调整图像的曝光
GPUImageContrastFilter:调整图像的对比度
GPUImageSaturationFilter:调整图像的饱和度
GPUImageGammaFilter:调整图像的灰度系数
GPUImageLevelsFilter:Photoshop级别调整。min ,max,minOut和maxOut参数是范围[0,1]中的浮点数如果你有来自Photoshop的参数,范围为[0,255],则必须首先将它们转换为[0, 1] 。gamma / mid参数是一个float> = 0的值。这与Photoshop的值匹配如果要对RGB以及单个通道应用级别,则需要使用此过滤器两次 - 首先用于单个通道,然后用于所有通道。
GPUImageColorMatrixFilter:通过向图像应用矩阵来转换图像的颜色
GPUImageRGBFilter:调整图像的每个 RGB通道
GPUImageHueFilter:调整图像的色调
GPUImageVibranceFilter:调整图像的动态
GPUImageWhiteBalanceFilter:调整图像的白平衡。
GPUImageToneCurveFilter:根据每个颜色通道的样条曲线调整图像的颜色。
GPUImageHighlightShadowFilter:调整图像的阴影和高光
GPUImageHighlightShadowTintFilter:允许您使用颜色和强度独立地着色图像的阴影和高光
{1.0f, 0.0f, 0.0f, 1.0f}
红色)。{0.0f, 0.0f, 1.0f, 1.0f}
蓝色)。GPUImageLookupFilter:使用RGB颜色查找图像重新映射图像中的颜色。首先,使用最最喜欢的照片编辑应用程序将过滤器应用于GPUImage / framework / Resources中的lookup.png。为了使其正常工作,每个像素颜色不能依赖于其他像素(例如模糊不起作用)。如果您需要更复杂的过滤器,您可以根据需要创建任意数量的查找表。准备好后,使用您的新lookup.png文件作为GPUImageLookupFilter的第二个输入。
GPUImageAmatorkaFilter:基于Amatorka的Photoshop操作的照片过滤器:http://amatorka.deviantart.com/art/Amatorka-Action-2-121069631。如果要使用此效果,您必须从lookup_amatorka.png从GPUImage资源文件夹添加到应用程序包。
GPUImageMissEtikateFilter:由Etikate小姐基于Photoshop操作的照片过滤器:http://miss-etikate.deviantart.com/art/Photoshop-Action-15-120151961。如果要使用此效果,您必须将lookup_miss_etikate.png从GPUImage资源文件夹添加到应用程序包。
GPUImageSoftEleganceFilter:另一个基于查找的颜色重映射过滤器。如果要使用此效果,您必须将lookup_soft_elegance_1.png和lookup_soft_elegance_2.png从GPUImage资源文件夹添加到应用程序包。
GPUImageSkinToneFilter:一个肤色调整过滤器,影响一个独特范围的轻肤色调,并相应地调整粉色/绿色或粉色/橙色的范围。默认值针对公平的白种人皮肤,但可以根据需要进行调整。
GPUImageSkinToneUpperColorGreen
或GPUImageSkinToneUpperColorOrange
GPUImageColorInvertFilter:反转图像的颜色
GPUImageGrayscaleFilter:将图像转换为灰度(饱和度滤镜的实现略快,但无法改变颜色贡献)
GPUImageMonochromeFilter:根据每个像素的亮度将图像转换为单色版本
GPUImageFalseColorFilter:使用图像的亮度在两个用户指定的颜色之间混合
GPUImageHazeFilter:用于添加或删除雾度(类似于UV过滤器)
GPUImageSepiaFilter:简单的棕褐色调滤波器
GPUImageOpacityFilter:调整传入图像的Alpha通道
GPUImageSolidColorGenerator:这将输出生成的图像的纯色。您需要使用-forceProcessingAtSize定义图像大小:
GPUImageLuminanceThresholdFilter:亮度高于阈值的像素将显示为白色,下面的像素将为黑色
GPUImageAdaptiveThresholdFilter:确定像素周边的局部亮度,然后如果像素低于该局部亮度,则将像素变为黑色,如果以上则为白色。这可以用于在不同的照明条件下挑选文本。
GPUImageAverageLuminanceThresholdFilter:这个应用阈值操作,其中基于场景的平均亮度连续地调整阈值。
GPUImageHistogramFilter:它分析传入的图像,并且创建一个输出直方图,其中出现每个颜色值的频率。该滤波器的输出是3像素高,256像素宽的图像,其中发生各种颜色值的频率的像素。每个颜色值占据256个宽度位置中的一个,从左边的0到右边的255. 可以针对各个颜色通道(kGPUImageHistogramRed,kGPUImageHistogramGreen,kGPUImageHistogramBlue),图像的亮度(kGPUImageHistogramLuminance )或者一次针对所有三个颜色通道(kGPUImageHistogramRGB)生成该直方图。
GPUImageHistogramGenerator:这是一个特殊的过滤器,因为它主要打算使用GPUImageHistogramFilter。它生成由GPUImageHistogramFilter生成的颜色直方图的输出表示,但它可以重新用于显示其他类型的值。它采取一个图像,看中心垂直)像素。然后它在输出纹理中的单独的彩色图表中绘制RGB分量的数值。您可能需要强制此过滤器的大小,以其输出可见。
GPUImageAverageColor:通过对图像中每个像素的RGBA分量进行平均,处理输入图像并确定场景的平均颜色。使用缩小处理来逐步向下取样GPU上的源图像,接着在CPU进行上短的平均计算此过滤器的输出无意义,但您需要将colorAverageProcessingFinishedBlock属性设置为接收四个颜色分块和一个帧时间的块,并对它们执行某些操作。
GPUImageLuminosity:像GPUImageAverageColor一样,这会将图像缩小到其平均亮度。你需要设置luminosityProcessingFinishedBlock来处理这个过滤器的输出,它会返回一个光度值和一个帧时间。
GPUImageChromaKeyFilter:对于图像中的给定颜色,将Alpha通道设置为0.这与GPUImageChromaKeyBlendFilter类似,只是不是在第二个图像中混合匹配的颜色,这不在第二个图像中,颜色透明。
GPUImageTransformFilter:这将对应图像应用任意的2-D或3-D变换
GPUImageCropFilter:将图像裁剪到特定区域,然后只将该区域传递到过滤器的下一个阶段
GPUImageLanczosResamplingFilter:这使您可以使用Lanczos重采样对图像进行上采样或下采样,这将产生比标准线性或三线性插值明显更好的质量。只需使用-forceProcessingAtSize:设置过滤器的目标输出分辨率,并且将为该新大小重新采样图像。
GPUImageSharpenFilter:锐化图像
GPUImageUnsharpMaskFilter:应用反锐化掩码
GPUImageGaussianBlurFilter:一种硬件优化,可变半径高斯模糊
GPUImageBoxBlurFilter:一个硬件优化,可变半径框模糊
GPUImageSingleComponentGaussianBlurFilter:仅对红色组件操作的GPUImageGaussianBlurFilter的修改
GPUImageGaussianSelectiveBlurFilter:保持圆形区域内焦点的高斯模糊
GPUImageGaussianBlurPositionFilter:GPUImageGaussianSelectiveBlurFilter的逆,只在特定圆圈内应用模糊
GPUImageiOSBlurFilter:尝试复制在图片控制中心这样的iOS 7上使用的背景模糊。
GPUImageMedianFilter:获取三个颜色分量的中值,超过3x3区域
GPUImageBilateralFilter:双边模糊,它试图模糊相似的颜色值,同时保留锐利的边缘
GPUImageTiltShiftFilter:模拟倾斜移位镜头效果
GPUImage3x3ConvolutionFilter:针对映像运行3x3卷积内核
GPUImageSobelEdgeDetectionFilter:Sobel边缘检测,边缘以白色突出显示
GPUImagePrewittEdgeDetectionFilter:Prewitt边缘检测,边缘以白色突出显示
GPUImageThresholdEdgeDetectionFilter:执行Sobel边缘检测,但应用阈值,而不提供渐进强度值
GPUImageCannyEdgeDetectionFilter:这使用完整的Canny过程来突出显示一个像素宽的边缘
GPUImageHarrisCornerDetectionFilter:对输入图像运行哈里斯角点检测算法,并生成一个图像,这些角点为白色像素,一切为黑色。可以设置cornersDetectedBlock,并且您将获得一个角度列表(在标准化的0..1 X, Y坐标),在回调中你想要执行的任何额外的操作。
GPUImageNobleCornerDetectionFilter:在哈里斯角点检测器上运行Noble变量。它的行为如上所述的哈里斯检测器。
GPUImageShiTomasiCornerDetectionFilter:运行Shi-Tomasi特征检测器。它的行为如上所述的哈里斯检测器。
GPUImageNonMaximumSuppressionFilter:当前仅用作哈里斯角点检测滤波器的一部分,这将对每个像素周围的1像素框进行采样,并中心确定的像素红色通道是否的英文该区域中的最大值如果的英文,它停留。如果不是,则对于所有颜色分量将其设置为0。
GPUImageXYDerivativeFilter:哈里斯角点检测滤波器内的一个内部组件,它计算这个点左右像素之间的平方差,这个点之上和之下的像素的平方差,以及这两个差值的乘积。
GPUImageCrosshairGenerator:它在图像上绘制一系列十字线,最常用于识别机器视觉特征。它不像其他过滤器那样接受标准图像,而是在其–renderCrosshairsFromArray:count:方法中包含一系列点,这是实际绘图。您将需要强制此过滤器以您需要的特定输出大小进行渲染。
GPUImageDilationFilter:这执行图像扩张操作,其中矩形邻域的红色通道的最强强度用于该像素的强度。初始化时指定采样的矩形区域的半径,范围为1-4个像素。这是为了用灰度图像,它扩展明亮的区域。
GPUImageRGBDilationFilter:这与GPUImageDilationFilter相同,只是它作用于所有颜色通道,而不只是红色通道。
GPUImageErosionFilter:执行图像侵蚀操作,其中矩形邻域中的红色通道的最强度用于该像素的强度。初始化时指定采样的矩形区域的半径,范围为1-4个像素。这是用于灰度图像,它扩展黑暗区域。
GPUImageRGBErosionFilter:这与GPUImageErosionFilter相同,只是它在所有颜色通道上起作用,而不只是红色通道。
GPUImageOpeningFilter:这对图像的红色通道执行侵蚀,随后是相同半径的膨胀。初始化时间设置半径,范围为1-4个像素。
GPUImageRGBOpeningFilter:这与GPUImageOpeningFilter相同,除了这个作用于所有颜色通道,而不只是红色通道。
GPUImageClosingFilter:它对图像的红色通道执行扩展,然后是相同半径的侵蚀。初始化时间设置半径,范围为1-4个像素。
GPUImageRGBClosingFilter:这与GPUImageClosingFilter相同,除了这个作用于所有颜色通道,而不只是红色通道。
GPUImageLocalBinaryPatternFilter:它执行8个周围像素和中心像素的红色通道的强度的比较,将比较结果编码成成为该像素强度的位串。最低有效位是右上角比较,逆时针转向以正确的比较结束作为最高有效位。
GPUImageLowPassFilter:对于输入的视频帧应用一个低通滤波器。这基本上累积了当前帧和当前帧的加权滚动平均值它可以用于去噪视频,添加运动模糊或用于创建高通滤波器。
GPUImageHighPassFilter:对输入的视频帧应用高通滤波器。这是低通滤波器的反相,示出了当前帧与前一帧的加权滚动平均值之间的差。这对运动检测最有用。
GPUImageMotionDetector:这是一个基于高通滤波器的运动检测器。您设置motionDetectionBlock,并且在每个传入帧中,它将为您提供场景中任何检测到的运动的质心(以标准化的X,Y坐标)以及场景的运动强度。
GPUImageHoughTransformLineDetector:使用霍夫变换检测图像中的线到平行坐标空间。这种方法完全基于由布尔诺科技大学的Graph @ FIT研究小组开发的PC线路过程,并在他们的出版物中描述:M.Dubská ,J.Havel,and A.Helout。使用平行坐标和OpenGL的线的实时检测。Proceedings of SCCG 2011,Bratislava,SK,第7 页(http://medusa.fit.vutbr.cz/public/data/论文/ 2011-SCCG-Dubska-Real-Time-Line-Detection-Using-PC-and-OpenGL.pdf)和M.Dubská,J.Havel,Herout。PClines -使用平行坐标的线检测。2011年计算机视觉与模式识别(CVPR)IEEE刀豆ference,对1489年至1494年(http://medusa.fit.vutbr.cz/public/data/papers /2011-CVPR-Dubska-PClines.pdf)。
GPUImageLineGenerator:生成可以覆盖场景的线的辅助类。这些线的颜色可以使用-setLineColorRed:green:blue:
GPUImageMotionBlurFilter:对图像应用定向运动模糊
GPUImageZoomBlurFilter:对图像应用定向运动模糊
GPUImageChromaKeyBlendFilter:use第二个图像选择性替换第一个图像中的颜色
GPUImageDissolveBlendFilter:应用两个图像的溶解混合
GPUImageMultiplyBlendFilter:应用两个图像的乘法混合
GPUImageAddBlendFilter:应用两个图像的加法混合
GPUImageSubtractBlendFilter:应用两个图像的减法混合
GPUImageDivideBlendFilter:应用两个图像的分割混合
GPUImageOverlayBlendFilter:应用两个图像的叠加混合
GPUImageDarkenBlendFilter:通过获取图像之间每个颜色分量的最小值来混合两个图像
GPUImageLightenBlendFilter:通过获取图像之间每个颜色分量的最大值来混合两个图像
GPUImageColorBurnBlendFilter:应用两个图像的颜色混合
GPUImageColorDodgeBlendFilter:应用两个图像的颜色闪避混合
GPUImageScreenBlendFilter:应用两个图像的屏幕混合
GPUImageExclusionBlendFilter:应用两个图像的排除混合
GPUImageDifferenceBlendFilter:应用两个图像的差异混合
GPUImageHardLightBlendFilter:应用一个硬光混合的两个图像
GPUImageSoftLightBlendFilter:应用两个图像的柔和光混合
GPUImageAlphaBlendFilter:根据第二个alpha通道,将第二个图像混合在第一个图像上
GPUImageSourceOverBlendFilter:在两个图像的混合上应用源
GPUImageColorBurnBlendFilter:应用两个图像的颜色混合
GPUImageColorDodgeBlendFilter:应用两个图像的颜色闪避混合
GPUImageNormalBlendFilter:应用两个图像的正常混合
GPUImageColorBlendFilter:应用两个图像的颜色混合
GPUImageHueBlendFilter:应用两个图像的色调混合
GPUImageSaturationBlendFilter:应用两个图像的饱和混合
GPUImageLuminosityBlendFilter:应用两个图像的亮度混合
GPUImageLinearBurnBlendFilter:应用两个图像的线性刻录混合
GPUImagePoissonBlendFilter:应用两个图像的泊松混合
GPUImageMaskFilter:使用另一个图像掩蔽一个图像
GPUImagePixellateFilter:对图像或视频应用像素化效果
GPUImagePolarPixellateFilter:对图片或视频应用像素化效果,基于极坐标,而不是笛卡尔坐标
GPUImagePolkaDotFilter:将图像分割成常规网格中的彩色点
GPUImageHalftoneFilter:对图像应用半色调效果,如新闻打印
GPUImageCrosshatchFilter:将图像转换为黑白交叉阴影图案
GPUImageSketchFilter:将视像转换为外观像草图。这只是Sobel边缘检测滤镜的颜色反转
GPUImageThresholdSketchFilter:与草图过滤器相同,只有边缘是阈值,而不是灰度
GPUImageToonFilter:这使用Sobel边缘检测在对象周围放置一个黑色边框,然后它量化图像中呈现的颜色,以给图像一个卡通般的质量。
GPUImageSmoothToonFilter:这使用与GPUImageToonFilter类似的过程,只有它之前的toon效果与高斯模糊,以平滑噪声。
GPUImageEmbossFilter:在图像上应用浮雕效果
GPUImagePosterizeFilter:这将颜色动态范围减少到指定的步骤数,导致图像的卡通式简单阴影。
GPUImageSwirlFilter:在图像上创建漩涡失真
GPUImageBulgeDistortionFilter:在图像上创建凸起失真
GPUImagePinchDistortionFilter:创建图像的混合失真
GPUImageStretchDistortionFilter:创建图像的拉伸失真
GPUImageSphereRefractionFilter:模拟通过玻璃球的折射
GPUImageGlassSphereFilter:与GPUImageSphereRefractionFilter相同,只有图像不被反转,并且在玻璃的边缘有一点点结霜
GPUImageVignetteFilter:执行渐晕效果,在边缘淡出图像
GPUImageKuwaharaFilter:Kuwahara图像抽象,绘制自Kyprianidis等人的工作。et al。在他们的出版物“GPU中”英文相邻词汇热门词汇“GPU” 英文“昂贵的,因此它可能需要几秒钟来渲染在iPad 2上的框架。这可能最适合用于静态图像。
GPUImageKuwaharaRadius3Filter:一个修改版本的Kuwahara过滤器,优化工作超过三个像素的半径
GPUImagePerlinNoiseFilter:生成一个充满Perlin噪声的图像
GPUImageCGAColorspaceFilter:模拟CGA显示器的色彩空间
GPUImageMosaicFilter:此过滤器接受一个输入的瓷砖集,瓷砖必须以亮度上升。它查看输入图像并根据该瓦片的亮度用输入瓦片替换每个显示瓦片。这个想法是复制在其他应用程序中看到的ASCII视频过滤器,但是tileset可以是任何东西。
GPUImageJFAVoronoiFilter:生成Voronoi地图,供以后阶段使用。
GPUImageVoronoiConsumerFilter:在Voronoi地图中,并使用它来过滤进入的图像。