这个系列文章我们来介绍一位海外工程师如何探索 GPUImage 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,本篇介绍 GPUImage 颜色调整过滤器。
——来自公众号“关键帧Keyframe”的分享
GPUImage 提供了 20+ 种 GPU 加速的色彩滤镜,覆盖亮度、对比度、饱和度、色调、色温、曲线、LUT 等全部常见场景,可在 实时视频 / 静态图片上零延迟运行。
1、基础三件套:亮度、对比度、曝光
| 滤镜 | 功能 | 范围 | 缺省 |
|---|
GPUImageBrightnessFilter | 线性提亮 / 压暗 | -1.0 … 1.0 | 0.0 |
GPUImageContrastFilter | 对比度拉伸 | 0.0 … 4.0 | 1.0 |
GPUImageExposureFilter | 摄影式曝光补偿 | -10.0 … 10.0 | 0.0 |
GPUImageBrightnessFilter *b = [[GPUImageBrightnessFilter alloc] init];
b.brightness = 0.25; // 提亮 25%
2、饱和度 & 伽马
| 滤镜 | 功能 | 范围 | 说明 |
|---|
GPUImageSaturationFilter | 饱和度 | 0.0 (灰) … 2.0 (过饱和) | 1.0 中性 |
GPUImageGammaFilter | 伽马曲线 | 0.0 … 3.0 | 1.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、白平衡 & 自然饱和度
| 滤镜 | 参数 | 范围 | 备注 |
|---|
GPUImageWhiteBalanceFilter | temperature | 4000–7000 K | 低值冷,高值暖 |
| tint | -200 … 200 | 负绿,正品红 |
GPUImageVibranceFilter | vibrance | -1.2 … 1.2 | 智能增强肤色友好 |
GPUImageWhiteBalanceFilter *wb = [[GPUImageWhiteBalanceFilter alloc] init];
wb.temperature = 5500;
wb.tint = -10;
5、级别 & 颜色矩阵
| 滤镜 | 功能 | 接口 |
|---|
GPUImageLevelsFilter | 类似 Photoshop Levels | setRedMin:gamma:max:minOut:maxOut: |
GPUImageColorMatrixFilter | 4×4 矩阵变换 | colorMatrix+ intensity |
GPUImageLevelsFilter *levels = [[GPUImageLevelsFilter alloc] init];
[levels setRedMin:0.2 gamma:1.0 max:0.9 minOut:0 maxOut:1];
6、高光 / 阴影 & 着色
| 滤镜 | 阴影 | 高光 | 额外着色 |
|---|
GPUImageHighlightShadowFilter | 0.0–1.0 | 0.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 → 一键电影级调色 |
GPUImageAmatorkaFilter/ MissEtikateFilter/ SoftEleganceFilter | 内置预设 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、性能建议
- 链顺序:先降复杂度(如灰度)再放细节滤镜。
- 批量处理:静态图一次性跑完整链,避免中间落盘。
- 实例复用:视频帧循环时只创建一次滤镜对象。
- 参数边界:极端值易导致颜色截断,保持合理区间。
- 内存:高分辨率视频注意 framebuffer 缓存,必要时手动清理。
11、速查表
| 需求 | 滤镜 |
|---|
| 提亮 / 压暗 | GPUImageBrightnessFilter |
| 加对比 | GPUImageContrastFilter |
| 饱和度 | GPUImageSaturationFilter |
| 改色温 | GPUImageWhiteBalanceFilter |
| 精准曲线 | GPUImageLevelsFilter |
| 电影 LUT | GPUImageLookupFilter |
| 肤色友好增强 | GPUImageVibranceFilter |
借助这些现成组件,你可以在 零 GLSL 代码的前提下完成专业级色彩校正,并随时通过链式组合实现无限创意。
学习和提升音视频开发技术,推荐你加入我们的知识星球:【关键帧的音视频开发圈】
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。