天天看點

GPUImage之視訊流濾鏡

源碼在最後,附帶濾鏡下載下傳位址

GPUImageVideoCamera使用教程,手把手教你怎麼做濾鏡

本文将介紹10種濾鏡效果包含

case :
            //棕褐色過濾器
            [self FSKSepiaFilter];
            break;
        case :
            //單色過濾器
            [self FSKMonochromeFilter];

            break;
        case :
            //灰階過濾器
            [self FSKGrayscaleFilter];

            break;
        case :
            //濾色過濾器
            [self FSKColorInvertFilter];

            break;
        case :
            //查詢過濾器
            [self FSKLookupFilter];

            break;
        case :
            //高亮投影過濾器
            [self FSKHighlightShadowFilter];

            break;
        case :
            //彩色矩陣過濾器

            [self FSKMatrixFilter];

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

            break;
        case :
            //伽馬線
            [self FSKGammaFilter];

            break;
        case :
            //美顔濾鏡

            [self FSKBeautifyFilter];

            break;
           

效果圖:

美女來自網上,希望沒有侵犯版權

GPUImage之視訊流濾鏡

實作步驟如下:

  1. 下載下傳GPUImage庫連結上篇文章提供,請前往
  2. 如圖在使用的地方-添加頭檔案#import “GPUImage.h”
    GPUImage之視訊流濾鏡

    注意不要害怕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 = ;
    [self.videoCamera addTarget:sepiaFilter];
    [sepiaFilter addTarget:self.filterView];
}
//單色過濾器
- (void)FSKMonochromeFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
    monochromeFilter.intensity = ;
    monochromeFilter.color = (GPUVector4){
        f, f, f, f
    };
    [monochromeFilter setColorRed: green: blue:];
    [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 = ;
    [self.videoCamera addTarget:lookupFilter];
    [lookupFilter addTarget:self.filterView];
}
//高亮投影過濾器
- (void)FSKHighlightShadowFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
    highlightShadowFilter.shadows = ;
    highlightShadowFilter.highlights = ;
    [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){
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f}
    };
    matrixFilter.intensity = ;
    [self.videoCamera addTarget:matrixFilter];
    [matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
    exposureFilte.exposure = ;
    [self.videoCamera addTarget:exposureFilte];
    [exposureFilte addTarget:self.filterView];
}

//伽馬線
- (void)FSKGammaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
    gammaFilter.gamma = ;
    [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/-, self.view.frame.size.height-, , )];
    [bt setBackgroundImage:[UIImage imageNamed:@"ShotCamera"] forState:UIControlStateNormal];
    [self.view addSubview:bt];
    bt.tag = ;
    [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>) {
        bt.tag=;
    }
}
- (void)arcRandomFilter:(int)caseIndex
{
    switch (caseIndex) {
        case :
            //棕褐色過濾器
            [self FSKSepiaFilter];
            break;
        case :
            //單色過濾器
            [self FSKMonochromeFilter];

            break;
        case :
            //灰階過濾器
            [self FSKGrayscaleFilter];

            break;
        case :
            //濾色過濾器
            [self FSKColorInvertFilter];

            break;
        case :
            //查詢過濾器
            [self FSKLookupFilter];

            break;
        case :
            //高亮投影過濾器
            [self FSKHighlightShadowFilter];

            break;
        case :
            //彩色矩陣過濾器

            [self FSKMatrixFilter];

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

            break;
        case :
            //伽馬線
            [self FSKGammaFilter];

            break;
        case :
            //美顔濾鏡

            [self FSKBeautifyFilter];

            break;
        default:
            break;
    }
}

//棕褐色過濾器
- (void)FSKSepiaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
    sepiaFilter.intensity = ;
    [self.videoCamera addTarget:sepiaFilter];
    [sepiaFilter addTarget:self.filterView];
}
//單色過濾器
- (void)FSKMonochromeFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
    monochromeFilter.intensity = ;
    monochromeFilter.color = (GPUVector4){
        f, f, f, f
    };
    [monochromeFilter setColorRed: green: blue:];
    [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 = ;
    [self.videoCamera addTarget:lookupFilter];
    [lookupFilter addTarget:self.filterView];
}
//高亮投影過濾器
- (void)FSKHighlightShadowFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
    highlightShadowFilter.shadows = ;
    highlightShadowFilter.highlights = ;
    [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){
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f}
    };
    matrixFilter.intensity = ;
    [self.videoCamera addTarget:matrixFilter];
    [matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
    exposureFilte.exposure = ;
    [self.videoCamera addTarget:exposureFilte];
    [exposureFilte addTarget:self.filterView];
}

//伽馬線
- (void)FSKGammaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
    gammaFilter.gamma = ;
    [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