探索 GPUImage 音视频技术(7):颜色调整过滤器

这个系列文章我们来介绍一位海外工程师如何探索 GPUImage 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,本篇介绍 GPUImage 颜色调整过滤器。

——来自公众号“关键帧Keyframe”的分享

GPUImage 提供了 20+ 种 GPU 加速的色彩滤镜,覆盖亮度、对比度、饱和度、色调、色温、曲线、LUT 等全部常见场景,可在 实时视频 / 静态图片上零延迟运行。

1、基础三件套:亮度、对比度、曝光

滤镜功能范围缺省
GPUImageBrightnessFilter线性提亮 / 压暗-1.0 … 1.00.0
GPUImageContrastFilter对比度拉伸0.0 … 4.01.0
GPUImageExposureFilter摄影式曝光补偿-10.0 … 10.00.0
GPUImageBrightnessFilter *b = [[GPUImageBrightnessFilter alloc] init];
b.brightness = 0.25;          // 提亮 25%

2、饱和度 & 伽马

滤镜功能范围说明
GPUImageSaturationFilter饱和度0.0 (灰) … 2.0 (过饱和)1.0 中性
GPUImageGammaFilter伽马曲线0.0 … 3.01.0 线性
GPUImageSaturationFilter *s = [[GPUImageSaturationFilter alloc] init];
s.saturation = 1.5;           // 增强色彩

3、RGB 通道 & 色相

滤镜功能用法
GPUImageRGBFilter独立调节 R/G/B 增益red / green / blue为 0.0–2.0 倍率
GPUImageHueFilter旋转色相hue = 0–360°
GPUImageRGBFilter *rgb = [[GPUImageRGBFilter alloc] init];
rgb.red   = 1.2;
rgb.green = 0.9;
rgb.blue  = 1.0;

4、白平衡 & 自然饱和度

滤镜参数范围备注
GPUImageWhiteBalanceFiltertemperature4000–7000 K低值冷,高值暖
tint-200 … 200负绿,正品红
GPUImageVibranceFiltervibrance-1.2 … 1.2智能增强肤色友好
GPUImageWhiteBalanceFilter *wb = [[GPUImageWhiteBalanceFilter alloc] init];
wb.temperature = 5500;
wb.tint        = -10;

5、级别 & 颜色矩阵

滤镜功能接口
GPUImageLevelsFilter类似 Photoshop LevelssetRedMin:gamma:max:minOut:maxOut:
GPUImageColorMatrixFilter4×4 矩阵变换colorMatrixintensity
GPUImageLevelsFilter *levels = [[GPUImageLevelsFilter alloc] init];
[levels setRedMin:0.2 gamma:1.0 max:0.9 minOut:0 maxOut:1];

6、高光 / 阴影 & 着色

滤镜阴影高光额外着色
GPUImageHighlightShadowFilter0.0–1.00.0–1.0
GPUImageHighlightShadowTintFilter同上同上支持自定义阴影 / 高光颜色
GPUImageHighlightShadowFilter *hs = [[GPUImageHighlightShadowFilter alloc] init];
hs.shadows   = 0.7;   // 提亮阴影
hs.highlights = 0.3;  // 压暗高光

7、一键艺术效果

滤镜描述
GPUImageColorInvertFilter反相
GPUImageGrayscaleFilter去色
GPUImageMonochromeFilter单色(可自定义颜色)
GPUImageSepiaFilter棕褐怀旧
GPUImageSepiaFilter *sepia = [[GPUImageSepiaFilter alloc] init];
sepia.intensity = 0.8;

8、LUT 查找表 & 预设

滤镜用法
GPUImageLookupFilter传入 LUT PNG → 一键电影级调色
GPUImageAmatorkaFilterMissEtikateFilterSoftEleganceFilter内置预设 LUT
GPUImagePicture *lut = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"lut.png"]];
GPUImageLookupFilter *lookup = [[GPUImageLookupFilter alloc] init];
[lut addTarget:lookup atTextureLocation:1];
[lut processImage];

9、在代码中使用

9.1、静态图片链式处理

UIImage *input = [UIImage imageNamed:@"sample.jpg"];
GPUImagePicture *source = [[GPUImagePicture alloc] initWithImage:input];

GPUImageBrightnessFilter *b = [[GPUImageBrightnessFilter alloc] init];
b.brightness = 0.2;
GPUImageContrastFilter *c = [[GPUImageContrastFilter alloc] init];
c.contrast = 1.3;
GPUImageSaturationFilter *s = [[GPUImageSaturationFilter alloc] init];
s.saturation = 1.2;

[source addTarget:b];
[b addTarget:c];
[c addTarget:s];
[s useNextFrameForImageCapture];
[source processImage];

UIImage *output = [s imageFromCurrentFramebuffer];

9.2、实时摄像头应用

GPUImageVideoCamera *cam = [[GPUImageVideoCamera alloc]
    initWithSessionPreset:AVCaptureSessionPreset640x480
           cameraPosition:AVCaptureDevicePositionBack];
cam.outputImageOrientation = UIInterfaceOrientationPortrait;

GPUImageSepiaFilter *sepia = [[GPUImageSepiaFilter alloc] init];
GPUImageView *preview = [[GPUImageView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:preview];

[cam addTarget:sepia];
[sepia addTarget:preview];
[cam startCameraCapture];

10、性能建议

  1. 链顺序:先降复杂度(如灰度)再放细节滤镜。
  2. 批量处理:静态图一次性跑完整链,避免中间落盘。
  3. 实例复用:视频帧循环时只创建一次滤镜对象。
  4. 参数边界:极端值易导致颜色截断,保持合理区间。
  5. 内存:高分辨率视频注意 framebuffer 缓存,必要时手动清理。

11、速查表

需求滤镜
提亮 / 压暗GPUImageBrightnessFilter
加对比GPUImageContrastFilter
饱和度GPUImageSaturationFilter
改色温GPUImageWhiteBalanceFilter
精准曲线GPUImageLevelsFilter
电影 LUTGPUImageLookupFilter
肤色友好增强GPUImageVibranceFilter

借助这些现成组件,你可以在 零 GLSL 代码的前提下完成专业级色彩校正,并随时通过链式组合实现无限创意。

学习和提升音视频开发技术,推荐你加入我们的知识星球:【关键帧的音视频开发圈】

探索 GPUImage 音视频技术(7):颜色调整过滤器

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论