示例代码:https://blog.csdn.net/m0_37677536/article/details/90439399
此滤镜有4个GPUImage自带滤镜合成可以自己修改效果参数
YHGPUImageBeautifyFilter.h

//
//  YHGPUImageBeautifyFilter.h
//  RecordVideo
//
//  Created by huizai on 2019/5/14.
//  Copyright © 2019 huizai. All rights reserved.
//#import "GPUImageFilterGroup.h"
#import "GPUImage.h"NS_ASSUME_NONNULL_BEGIN@class GPUImageCombinationFilter;@interface YHGPUImageBeautifyFilter : GPUImageFilterGroup{GPUImageBilateralFilter *bilateralFilter;GPUImageCannyEdgeDetectionFilter *cannyEdgeFilter;GPUImageCombinationFilter *combinationFilter;GPUImageHSBFilter *hsbFilter;
}@endNS_ASSUME_NONNULL_END

YHGPUImageBeautifyFilter.m

//
//  YHGPUImageBeautifyFilter.m
//  RecordVideo
//
//  Created by huizai on 2019/5/14.
//  Copyright © 2019 huizai. All rights reserved.
//#import "YHGPUImageBeautifyFilter.h"// Internal CombinationFilter(It should not be used outside)
@interface GPUImageCombinationFilter : GPUImageThreeInputFilter
{GLint smoothDegreeUniform;
}@property (nonatomic, assign) CGFloat intensity;@endNSString *const kGPUImageBeautifyFragmentShaderString = SHADER_STRING
(varying highp vec2 textureCoordinate;varying highp vec2 textureCoordinate2;varying highp vec2 textureCoordinate3;uniform sampler2D inputImageTexture;uniform sampler2D inputImageTexture2;uniform sampler2D inputImageTexture3;uniform mediump float smoothDegree;void main(){highp vec4 bilateral = texture2D(inputImageTexture, textureCoordinate);highp vec4 canny = texture2D(inputImageTexture2, textureCoordinate2);highp vec4 origin = texture2D(inputImageTexture3,textureCoordinate3);highp vec4 smooth;lowp float r = origin.r;lowp float g = origin.g;lowp float b = origin.b;if (canny.r < 0.2 && r > 0.3725 && g > 0.1568 && b > 0.0784 && r > b && (max(max(r, g), b) - min(min(r, g), b)) > 0.0588 && abs(r-g) > 0.0588) {smooth = (1.0 - smoothDegree) * (origin - bilateral) + bilateral;}else {smooth = origin;}smooth.r = log(1.0 + 0.2 * smooth.r)/log(1.2);smooth.g = log(1.0 + 0.2 * smooth.g)/log(1.2);smooth.b = log(1.0 + 0.2 * smooth.b)/log(1.2);gl_FragColor = smooth;});@implementation GPUImageCombinationFilter- (id)init {if (self = [super initWithFragmentShaderFromString:kGPUImageBeautifyFragmentShaderString]) {smoothDegreeUniform = [filterProgram uniformIndex:@"smoothDegree"];}self.intensity = 0.5;return self;
}- (void)setIntensity:(CGFloat)intensity {_intensity = intensity;[self setFloat:intensity forUniform:smoothDegreeUniform program:filterProgram];
}@end@implementation YHGPUImageBeautifyFilter- (id)init;
{if (!(self = [super init])){return nil;}// First pass: face smoothing filterbilateralFilter = [[GPUImageBilateralFilter alloc] init];bilateralFilter.distanceNormalizationFactor = 4.0;[self addFilter:bilateralFilter];// Second pass: edge detectioncannyEdgeFilter = [[GPUImageCannyEdgeDetectionFilter alloc] init];[self addFilter:cannyEdgeFilter];// Third pass: combination bilateral, edge detection and origincombinationFilter = [[GPUImageCombinationFilter alloc] init];[self addFilter:combinationFilter];// Adjust HSBhsbFilter = [[GPUImageHSBFilter alloc] init];[hsbFilter adjustBrightness:1.1];[hsbFilter adjustSaturation:1.1];[bilateralFilter addTarget:combinationFilter];[cannyEdgeFilter addTarget:combinationFilter];[combinationFilter addTarget:hsbFilter];self.initialFilters = [NSArray arrayWithObjects:bilateralFilter,cannyEdgeFilter,combinationFilter,nil];self.terminalFilter = hsbFilter;return self;
}#pragma mark -
#pragma mark GPUImageInput protocol- (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)textureIndex;
{for (GPUImageOutput<GPUImageInput> *currentFilter in self.initialFilters){if (currentFilter != self.inputFilterToIgnoreForUpdates){if (currentFilter == combinationFilter) {textureIndex = 2;}[currentFilter newFrameReadyAtTime:frameTime atIndex:textureIndex];}}
}- (void)setInputFramebuffer:(GPUImageFramebuffer *)newInputFramebuffer atIndex:(NSInteger)textureIndex;
{for (GPUImageOutput<GPUImageInput> *currentFilter in self.initialFilters){if (currentFilter == combinationFilter) {textureIndex = 2;}[currentFilter setInputFramebuffer:newInputFramebuffer atIndex:textureIndex];}
}@end

iOS GPUImage 自定义美颜滤镜相关推荐

  1. iOS GPUImage之滤镜功能说明

    GPUImage 简介 GPUImage是一个非常牛逼的图像处理的开源库,里面提供了大概125种滤镜效果来加工图像,并且支持照相机和摄像机的实时滤镜,能够满足我们日常美颜/滤镜开效果.通过这样强大的开 ...

  2. iOS:GPUImage 简介及滤镜

    GPUImage 是一个开元的基于 GPU 的图片或视频的处理框架,其本身内置了多达 120 多种常见的滤镜效果,并且支持照相机和摄像机的实时滤镜,并且能够自定义图像滤镜. 美颜的基本概念 OpenG ...

  3. 如何快速的开发一个完整的iOS直播app(美颜篇)

    1.前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主 ...

  4. iOS GPUImage研究总结

    小专栏:GPUImage的源码解读,带你打造一个实用框架 Part one: 关于GPUImage 这里直接引用官方描述: The GPUImage framework is a BSD-licens ...

  5. 基于GPUImage的美颜BeautifyFace详细注释

    GPUImageBeautifyFilter.h文件中 #import <GPUImage/GPUImage.h> @class GPUImageCombinationFilter; @i ...

  6. 基于GPUImage的多滤镜rtmp直播推流

    之前做过开源videocore的推流改进:1)加入了美颜滤镜; 2) 加入了librtmp替换原来过于简单的rtmpclient: 后来听朋友说,在videocore上面进行opengl修改,加入新的 ...

  7. 使用GPUImage实现视频滤镜

    关于GPUImage 这里直接引用官方描述: The GPUImage framework is a BSD-licensed iOS library that lets you apply GPU- ...

  8. Android视频编辑器(三)给本地视频加水印和美颜滤镜

    前言          在上两篇文章中,我们分别实现了通过OpenGL预览.录制视频,以及在预览和录制的时候加上视频水印和美白效果,而作为一个视频编辑器,当然不仅仅是录制视频,也会有从本地选择视频,然 ...

  9. 美颜滤镜sdk常用的图形处理算法、代码分析

    美颜滤镜sdk目前在视频.图文社交平台中的使用率是非常高的,特别是短视频平台和直播平台.今天小编就为大家讲解一下美颜滤镜sdk经常用到的算法和代码. 一.预处理算法.检测算法 在采集完图像后,首先会对 ...

  10. gpuImage实现美颜水印相机和简单的图片处理

    gpuImage实现美颜水印相机和图片滤镜 @Author GQ 2018年06月23日 项目中用到水印相机,还要美颜功能,记录一下实现过程,又看了一部分gpuImage文档的图片滤镜 参考: htt ...

最新文章

  1. 深度学习有哪些经典数据集?
  2. 网络中最常用的网络命令(6)-完整参数
  3. 源码下编译APK,却是总是提示,找不到符号:SystemProperties 。。。
  4. 目前流行的装修风格_当下最流行十种装修风格,总有一款适合你!
  5. vim中自动添加文件的作者、时间信息、版本等
  6. 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
  7. 比特币系列——竞争币、竞争块链和应⽤程序
  8. 华为 台积电 高通申请_台积电/高通纷纷力挺华为!全面放下姿态:将不再断供华为芯片产品...
  9. centos下配置LNMP环境(源码安装)
  10. 常用邮箱SMTP服务器地址大全
  11. 【足迹C++primer】51、面向对象编程概述
  12. linux编译mmplay,mplay编译与移植
  13. 论文--Learning to Predict Bus Arrival Time From Heterogeneous Measurements via Recurrent Neural Networ
  14. OpenGL ES EGL eglMakeCurrent
  15. 七星配资爆量强上攻创业板大阳
  16. Windows系统 电脑系统重装详细图文教程(绝对够详细,看这一篇就够)
  17. 关于Hadoop在java客户端进行下载时的异常java.io.FileNotFoundException: Hadoop home directory is no existed的解决办法
  18. Z-Score如何计算
  19. 《电子设计工程》期刊简介
  20. QWidget/QToolBar::addAction的设计真是绝妙

热门文章

  1. 20年前的人机大战,IBM“深蓝”耍了花招
  2. java 工作流 轻量级,java轻量级工作流框架
  3. 全栈式PHP集成环境-laragon(一)介绍、安装
  4. mui 框架图片预览
  5. MVVM框架的了解与使用
  6. mw150um 驱动程序win10_win10系统版水星mw150us无线网卡驱动
  7. 红帽社区内容需要订阅访问
  8. 基于K均值聚类算法的图像分割(Matlab)
  9. 机器学习算法一之基于K均值聚类算法实现数据聚类及二维图像像素分割
  10. 8086cpu物理寻址