GPUImage之视频流滤镜

源码在最后,附带滤镜下载地址

GPUImageVideoCamera使用教程,手把手教你怎么做滤镜

本文将介绍10种滤镜效果包含

case 0:
            //棕褐色过滤器
            [self FSKSepiaFilter];
            break;
        case 1:
            //单色过滤器
            [self FSKMonochromeFilter];

            break;
        case 2:
            //灰度过滤器
            [self FSKGrayscaleFilter];

            break;
        case 3:
            //滤色过滤器
            [self FSKColorInvertFilter];

            break;
        case 4:
            //查询过滤器
            [self FSKLookupFilter];

            break;
        case 5:
            //高亮投影过滤器
            [self FSKHighlightShadowFilter];

            break;
        case 6:
            //彩色矩阵过滤器

            [self FSKMatrixFilter];

            break;
        case 7:
            //曝光度
            [self FSKExposureFilter];

            break;
        case 8:
            //伽马线
            [self FSKGammaFilter];

            break;
        case 9:
            //美颜滤镜

            [self FSKBeautifyFilter];

            break;

效果图:
美女来自网上,希望没有侵犯版权这里写图片描述

实现步骤如下:

  1. 下载GPUImage库链接上篇文章提供,请前往

  2. 如图在使用的地方-添加头文件#import “GPUImage.h”
    这里写图片描述
    注意不要害怕Swift文件,本文尚未用到,关于oc调用swift请看这里,后续补充
    3.设置全局的camera对象,以及全局的显示view

@property (nonatomic, strong) GPUImageVideoCamera *videoCamera;
//屏幕上显示的View
@property (nonatomic, strong) GPUImageView *filterView;

4.初始化相机,设置相机的输出分辨率,捕获画面摄像头的位置,以及显示时的方向。

- (void)viewDidLoad {
    [super viewDidLoad];
    //初始化相机,设置相机的输出分辨率,捕获画面摄像头的位置
    self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    //以及显示时的方向
    self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    }

5.初始化显示view。设置为全屏铺满。

//初始化显示view
self.filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
//设置为全屏铺满。
self.filterView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
self.filterView.center = self.view.center;

6.开始捕获画面,开始显示

[self.view addSubview:self.filterView]; [self.videoCamera startCameraCapture];
[self.videoCamera addTarget:self.filterView];

7.添加滤镜,这个滤镜比较明显

//灰度过滤器
- (void)FSKGrayscaleFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc]init];
    [self.videoCamera addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:self.filterView];
}

[self.videoCamera removeAllTargets];这句话非常重要,是为了移除之前的滤镜效果,以免重复添加

美颜滤镜
滤镜下载,地址,http://download.csdn.net/detail/xoxo_x/9646726
关于滤镜的介绍请点击这里,包括了滤镜的实现过程

//美颜滤镜
- (void)FSKBeautifyFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
    [self.videoCamera addTarget:beautifyFilter];
    [beautifyFilter addTarget:self.filterView];
}

其他滤镜

//棕褐色过滤器
- (void)FSKSepiaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
    sepiaFilter.intensity = 0.4;
    [self.videoCamera addTarget:sepiaFilter];
    [sepiaFilter addTarget:self.filterView];
}
//单色过滤器
- (void)FSKMonochromeFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
    monochromeFilter.intensity = 0.4;
    monochromeFilter.color = (GPUVector4){
        1.f, 0.f, 1.f, 0.f
    };
    [monochromeFilter setColorRed:0.3 green:0.4 blue:0.5];
    [self.videoCamera addTarget:monochromeFilter];
    [monochromeFilter addTarget:self.filterView];
}
//灰度过滤器
- (void)FSKGrayscaleFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc]init];
    [self.videoCamera addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:self.filterView];
}
//滤色过滤器
- (void)FSKColorInvertFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorInvertFilter *colorInvertFilter = [[GPUImageColorInvertFilter alloc]init];
    [self.videoCamera addTarget:colorInvertFilter];
    [colorInvertFilter addTarget:self.filterView];
}
//查询过滤器
- (void)FSKLookupFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageLookupFilter *lookupFilter = [[GPUImageLookupFilter alloc]init];
    lookupFilter.intensity = 0.4;
    [self.videoCamera addTarget:lookupFilter];
    [lookupFilter addTarget:self.filterView];
}
//高亮投影过滤器
- (void)FSKHighlightShadowFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
    highlightShadowFilter.shadows = 0.4;
    highlightShadowFilter.highlights = 0.4;
    [self.videoCamera addTarget:highlightShadowFilter];
    [highlightShadowFilter addTarget:self.filterView];
}
//柔化过滤器
- (void)FSKSoftEleganceFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSoftEleganceFilter *softEleganceFilter = [[GPUImageSoftEleganceFilter alloc]init];
    [self.videoCamera addTarget:softEleganceFilter];
    [softEleganceFilter addTarget:self.filterView];
}
//彩色矩阵过滤器
- (void)FSKMatrixFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorMatrixFilter *matrixFilter = [[GPUImageColorMatrixFilter alloc]init];
    matrixFilter.colorMatrix = (GPUMatrix4x4){
        {1.f, 0.f, 1.f, 0.f},
        {0.f, 1.f, 0.f, 0.f},
        {0.f, 0.f, 1.f, 0.f},
        {0.f, 1.f, 0.f, 1.f}
    };
    matrixFilter.intensity = 0.5;
    [self.videoCamera addTarget:matrixFilter];
    [matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
    exposureFilte.exposure = 0.3;
    [self.videoCamera addTarget:exposureFilte];
    [exposureFilte addTarget:self.filterView];
}

//伽马线
- (void)FSKGammaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
    gammaFilter.gamma = 0.2;
    [self.videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:self.filterView];

}

工程所有代码:仅供参考:

//
//  ViewController.m
//  GPUText
//
//  Created by fsk-0-1-n on 16/9/27.
//  Copyright © 2016年 Xoxo. All rights reserved.
//

#import "FSKMainViewController.h"
#import "GPUImage.h"
#import "GPUImageBeautifyFilter.h"


@interface FSKMainViewController ()
@property (nonatomic, strong) GPUImageVideoCamera *videoCamera;
//屏幕上显示的View
@property (nonatomic, strong) GPUImageView *filterView;


@end

@implementation FSKMainViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    self.videoCamera.horizontallyMirrorFrontFacingCamera = YES;
    self.filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
    self.filterView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    self.filterView.center = self.view.center;
    [self.view addSubview:self.filterView];
    [self.videoCamera startCameraCapture];
    [self.videoCamera addTarget:self.filterView];

    UIButton *bt = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width/2-25, self.view.frame.size.height-50, 50, 50)];
    [bt setBackgroundImage:[UIImage imageNamed:@"ShotCamera"] forState:UIControlStateNormal];
    [self.view addSubview:bt];
    bt.tag = 0;
    [bt addTarget:self action:@selector(changeFilter:) forControlEvents:UIControlEventTouchUpInside];

//    [self arcRandomFilter:(arc4random()%11)];

}
- (void)changeFilter:(UIButton *)bt
{

    [self arcRandomFilter:(int)(bt.tag)];
    bt.tag++;
    if (bt.tag>9) {
        bt.tag=0;
    }
}
- (void)arcRandomFilter:(int)caseIndex
{
    switch (caseIndex) {
        case 0:
            //棕褐色过滤器
            [self FSKSepiaFilter];
            break;
        case 1:
            //单色过滤器
            [self FSKMonochromeFilter];

            break;
        case 2:
            //灰度过滤器
            [self FSKGrayscaleFilter];

            break;
        case 3:
            //滤色过滤器
            [self FSKColorInvertFilter];

            break;
        case 4:
            //查询过滤器
            [self FSKLookupFilter];

            break;
        case 5:
            //高亮投影过滤器
            [self FSKHighlightShadowFilter];

            break;
        case 6:
            //彩色矩阵过滤器

            [self FSKMatrixFilter];

            break;
        case 7:
            //曝光度
            [self FSKExposureFilter];

            break;
        case 8:
            //伽马线
            [self FSKGammaFilter];

            break;
        case 9:
            //美颜滤镜

            [self FSKBeautifyFilter];

            break;
        default:
            break;
    }
}

//棕褐色过滤器
- (void)FSKSepiaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
    sepiaFilter.intensity = 0.4;
    [self.videoCamera addTarget:sepiaFilter];
    [sepiaFilter addTarget:self.filterView];
}
//单色过滤器
- (void)FSKMonochromeFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
    monochromeFilter.intensity = 0.4;
    monochromeFilter.color = (GPUVector4){
        1.f, 0.f, 1.f, 0.f
    };
    [monochromeFilter setColorRed:0.3 green:0.4 blue:0.5];
    [self.videoCamera addTarget:monochromeFilter];
    [monochromeFilter addTarget:self.filterView];
}
//灰度过滤器
- (void)FSKGrayscaleFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc]init];
    [self.videoCamera addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:self.filterView];
}
//滤色过滤器
- (void)FSKColorInvertFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorInvertFilter *colorInvertFilter = [[GPUImageColorInvertFilter alloc]init];
    [self.videoCamera addTarget:colorInvertFilter];
    [colorInvertFilter addTarget:self.filterView];
}
//查询过滤器
- (void)FSKLookupFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageLookupFilter *lookupFilter = [[GPUImageLookupFilter alloc]init];
    lookupFilter.intensity = 0.4;
    [self.videoCamera addTarget:lookupFilter];
    [lookupFilter addTarget:self.filterView];
}
//高亮投影过滤器
- (void)FSKHighlightShadowFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
    highlightShadowFilter.shadows = 0.4;
    highlightShadowFilter.highlights = 0.4;
    [self.videoCamera addTarget:highlightShadowFilter];
    [highlightShadowFilter addTarget:self.filterView];
}
//柔化过滤器
- (void)FSKSoftEleganceFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSoftEleganceFilter *softEleganceFilter = [[GPUImageSoftEleganceFilter alloc]init];
    [self.videoCamera addTarget:softEleganceFilter];
    [softEleganceFilter addTarget:self.filterView];
}
//彩色矩阵过滤器
- (void)FSKMatrixFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorMatrixFilter *matrixFilter = [[GPUImageColorMatrixFilter alloc]init];
    matrixFilter.colorMatrix = (GPUMatrix4x4){
        {1.f, 0.f, 1.f, 0.f},
        {0.f, 1.f, 0.f, 0.f},
        {0.f, 0.f, 1.f, 0.f},
        {0.f, 1.f, 0.f, 1.f}
    };
    matrixFilter.intensity = 0.5;
    [self.videoCamera addTarget:matrixFilter];
    [matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
    exposureFilte.exposure = 0.3;
    [self.videoCamera addTarget:exposureFilte];
    [exposureFilte addTarget:self.filterView];
}

//伽马线
- (void)FSKGammaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
    gammaFilter.gamma = 0.2;
    [self.videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:self.filterView];

}
//美颜滤镜
- (void)FSKBeautifyFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
    [self.videoCamera addTarget:beautifyFilter];
    [beautifyFilter addTarget:self.filterView];
}

@end
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值