用GPUImage给视频添加多个滤镜

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

http://www.voidcn.com/blog/u1031/article/p-4178831.html

之前说过要写的博客。。关于使用GPUImage来做混合滤镜和水印等效果;

放了国庆假期之后。。终于想起来要填坑了。。尴尬。。于是现在来简单说一下GPUImage做混合滤镜的做法;

其实做混合滤镜,GPUImage一共有2种做法:一是使用GPUImageFilterGroup, 二是用多个GPUImageFilter来叠合;

这里先讲第一种: GPUImageFilterGroup


GPUImageFilterGroup包括上面几个属性和方法;

其中initialFilters指的是数据源的传入Filter(比如GPUImageUIElement的target,GPUImagePicture的target等)

terminalFilter指的是最后的Filter,它的target就是数据的输出口;

具体可以看GPUImage的官方例子:FilterShowcase

第二种方法:

1. 最简单的Filter是这样用的:

2. 如果做滤镜的叠合,其实就是多个Filter串联在一起:

3. 如果这些滤镜中,要做混合效果(强光混合之类的,就是需要2个输入源的话)

这里给出简单代码:

 <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//输入的数据(image)</span>
    <span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">UIImage</span> *img = [<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">UIImage</span> imageNamed:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"secPersonDemo.png"</span>];
    _pic = [[GPUImagePicture alloc] initWithImage:img];
    
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//经过的渠道(filter)</span>
    _brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    [_brightnessFilter setBrightness:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">0</span>];
    
    _contrastFilter = [[GPUImageContrastFilter alloc] init];
    [_contrastFilter setContrast:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">1.0</span>];
    
    _rgbFilter = [[GPUImageToneCurveFilter alloc] init];
    
    _blurFilter = [[GPUImageiOSBlurFilter alloc] init];
    [_blurFilter setBlurRadiusInPixels:-<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">12.0</span>f];
    
    _vignetteFilter = [[GPUImageVignetteFilter alloc] init];
    
    _bilateralFilter = [[GPUImageBilateralFilter alloc] init];
    [_bilateralFilter setFirstDistanceNormalizationFactorUniform:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">15</span>];
    [_bilateralFilter setSecondDistanceNormalizationFactorUniform:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">25</span>];
    
    _rgbOpeningFilter = [[GPUImageRGBOpeningFilter alloc] initWithRadius:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">0.2</span>];
    
    _saturationFilter = [[GPUImageSaturationFilter alloc] init];
    
    _softLightBlendFilter = [[GPUImageSoftLightBlendFilter alloc] init];
    
    _pict = [[GPUImagePicture alloc] initWithImage:[<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">UIImage</span> imageNamed:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"blend.png"</span>]];
    
    
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//设置连接(target)</span>
    [_pic addTarget:_rgbFilter];
    [_rgbFilter addTarget:_contrastFilter];
    [_contrastFilter addTarget:_brightnessFilter];
    [_brightnessFilter addTarget:_bilateralFilter];
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_blurFilter addTarget:_vignetteFilter];</span>
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_vignetteFilter addTarget:_imageview];</span>
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_vignetteFilter addTarget:_bilateralFilter];</span>
    [_bilateralFilter addTarget:_rgbOpeningFilter];
    [_rgbOpeningFilter addTarget:_saturationFilter];
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_saturationFilter addTarget:_imageview];</span>
    
    [_saturationFilter addTarget:_softLightBlendFilter];
    [_pict addTarget:_softLightBlendFilter];
    
    [_softLightBlendFilter addTarget:_imageview];<span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//_imageview是一个GPUImageView,用来显示结果的</span>
    
    [_pict processImage];
    [_pic processImage];

iOS GPUImage研究五:短视频拍摄(滤镜、文件写入) 希望这个Demo,可以给大家在视频滤镜制作上带来一些灵感、避免重复造轮子。也希望大家转载的时候带上原文地址,算是对原创的鼓励。最下方有Demo地址 运行环境Xcode7.3.1这个Demo应该是对GPUImage的总结吧,包含了视频写入,滤镜信息读取。前面几篇文章也分别对GPUImage中常用的功能进行了分别介绍。虽说GPUImage是开源的,但对初学者来讲上手还是有一定难度的,希望可以帮助大家。 阅读详情

相关推荐

在 iOS 中给视频添加滤镜

「众所周知,视频可以 P」,今天我们来学习怎么给视频添加滤镜。 在 iOS 中,对视频进行图像处理一般有两种方式:GPUImage 和 AVFoundation 。 一、GPUImage 在之前的文章中,我们对 GPUImage 已经有了一定的了解。之前一般使用它对摄像头采集的图像数据进行处理,然而,它对本地视频的处理也一样方便。 直接看代码: // movie NSString *path = [[NSBundle mainBundle] pathForResource:@.

a1661408343的博客 2742

实现各种各样图像滤镜(图像处理)效果,多达50多种效果

实现各种各样图像滤镜(图像处理)效果,多达50多种效果,基本囊括了最常见的图像处理效果。包括:contrast,hue,gamma,brightness,sharpness,emboss,saturation,exposure,shadow,blend等等。 由于需要用到OpenGL ES 2.0,所以,仅能在真机中测试。可以载入本地相册的照片或者直接拍照后进行照片处理。

使用GPUimage实现视频滤镜

关于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

syh96123的博客 784

gpuimage给本地视频添加滤镜

gpuimage给本地视频添加滤镜

GPUImge学习日记(3) 之滤镜组合使用

简介:我们常常遇到需要叠加使用滤镜的业务需求,比如一个相机app里既需要素描效果的同时又需要周围阴影效果以突出中间图像.这就需要本文介绍的有关滤镜组合使用的内容. GPUImage 中关于滤镜组合使用有两种方法: GPUImageFilterGroup与相应filter(GPUImageFilter)相结合将需要使用的filter相累加 第二种方法以后另讲,这里主要讲一下有关使用GP

时光的博客 591

GPUImage 简单使用(二)组合滤镜使用

这里组合滤镜我使用的是GPUImageFilterPipeline这个类  一、步骤: 1、创建图片处理类 GPUImagePicture 把图片传进去stillImage GPUImagePicture *staticPicture = [[GPUImagePicture alloc] initWithImage:stillImage smoothlyScaleOutput:YES

Edison_hou的专栏 6247

Android GPUImage源码分析(三) GPUImageFilterGroup源码分析

/** * Resembles a filter that consists of multiple filters applied after each * other. */ public class GPUImageFilterGroup extends GPUImageFilter { private List<GPUImageFilter> filters;...

972

使用gpuimage实现的本地视频添加滤镜demo

gpuimage是一个开源的视频滤镜项目。这个demo就是使用这两者实现的本地视频添加滤镜功能。其中包含了一些ffmpeg的工具,可以直接调用。详细信息以后有时间了再补充,先把demo发上来。 gpuimage给本地视频添加滤镜 - 下载频道 - CSDN.NET http://download.csdn.net/detail/baidu_31093133/9845962

秦时明月 3859

GPUImage 解析

GPUImage解析(一) —— 基本概览(一)GPUImage解析(二) —— 基本概览(二)GPUImage解析(三) —— 基本概览(三)GPUImage解析(四) —— 安装方法及框架介绍GPUImage解析(五) —— 框架中的几个基类GPUImage解析(六) —— 一个简单的实例(一)GPUIm...

weixin_33994429的博客 218

GPUImage初级使用 Part 1

#### 初级使用(一) - 给image添加滤镜,然后显示到UIImageView上 ```objc self.mGPUImageView = [[GPUImageView alloc]init]; self.mGPUImageView.fillMode = kGPUImageFillModeStretch; GPUImageFilter *filter = [[GPUImageWeak...

King的博客 350

iOS上用GPUImage视频滤镜

最近在做一个需要给已有视频滤镜的app,不是实时滤镜,而是给已经存在的视频滤镜。 虽然网上有很多关于GPUImage的博客,但大多都是给图片加上滤镜或者是直接在摄像头上加上的实时滤镜,找了很久之后..... 发现在github上本来就有.....

u1031的专栏 3773

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

GPUImage中使用实时滤镜最简单的方法就是使用GPUImageVideoCamera这个类。通过添加滤镜来实时显示音视频。 前面http://blog.csdn.net/Xoxo_x/article/details/57079331我们知道: 首先我们要了解,下面的内容:GPUImageOutput(输出)中含有如下方法- (void)addTarget:(id<GPUImageInput

Quinn's blog ! I'm glad to be here! 8130

GPUImage多种滤镜的使用示范以及美颜滤镜初步实现

GPUImage多种滤镜的使用示范以及美颜滤镜初步实现GPUImagePicture

使用GPUImage实现视频滤镜

GPUImage是一个著名的图像处理开源库,可以实现图像的输入、处理、输出等。这篇文章先总结了一下GPUImage的工作原理,然后将接入app时的一些注意事项分享给大家。

阿里云栖社区博客 1760

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

GPUImage中使用实时滤镜最简单的方法就是使用GPUImageVideoCamera这个类。通过添加滤镜来实时显示音视频。处理的视频链接:https://coding.net/u/Xoxo_x/p/IFlyDemo/git/blob/master/IMG_3554.m4v 情况 内容 情况一 实时滤镜处理 情况二 视频文件处理 情况一:实时滤镜处理上篇文章我们已经介绍到实

Quinn's blog ! I'm glad to be here! 6299

iOS:GPUImage 简介及滤镜

GPUImage 是一个开元的基于 GPU 的图片或视频的处理框架,其本身内置了多达 120 多种常见的滤镜效果,并且支持照相机和摄像机的实时滤镜,并且能够自定义图像滤镜。 美颜的基本概念 OpenGL ES: 开源嵌入式系统图形的处理框架,一套图形与硬件接口,创造了软件与图形加速间灵活强大的底层交互接口。用于把处理好的图片显示到屏幕上。 GPU: (图形处理单元)手机或者电脑用于图像处理和渲染的...

GSNICE 2565

GPUImage视频滤镜

手把手教你怎么做滤镜,源码在最后,附带滤镜下载地址本文将介绍10种滤镜效果。GPUImageVideoCamera的使用方法,详细教程。包含独立的美颜滤镜

Quinn's blog ! I'm glad to be here! 5557

iOS GPUImage使用 短视频录制 暂停录制 滤镜 自定义美颜滤镜 gif动态及文本水印添加 视频拼接

功能(有示例代码): 1.基于GPUImage自定义美颜滤镜 2.基于GPUImage添加文本水印及动态水印 3.录制过程中各种滤镜随意切换,及文本水印动态水印随意切换可以加载gif图作为水印 4.录制过程中可以暂停并继续录制 5.使用AVFoundation框架进行视频拼接 6.获取短视频第一帧图片,示例代码中有方法 录制页面: 示例代码:https://github.com/huizai07...

huizai的博客 3162

iOS 使用GPUImage为本地视频添加滤镜

iOS视频滤镜添加,下面介绍使用GPUImage给本地视频添加滤镜

细雨清风的博客 4988
上一篇: iOS自定义转场动画
下一篇: iOS系统网络抓包方法
jeffasd
博客等级 码龄15年 450粉丝 383原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值