探索 GPUImage 音视频技术(3):基本图像过滤

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

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

GPUImage 利用 GPU 并行计算,可显著优于传统 CPU 处理。以下内容带你快速上手静态图片的滤镜应用。

1、准备工作:把图片载入管线

使用 GPUImagePicture作为输入源:

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

2、单滤镜应用

2.1、显式链式(适合后续扩展)

GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc] init];

[stillImageSource addTarget:sepiaFilter];
[sepiaFilter useNextFrameForImageCapture];   // 保留输出供捕获
[stillImageSource processImage];

UIImage *filteredImage = [sepiaFilter imageFromCurrentFramebuffer];

2.2、一行搞定(简单场景)

GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
UIImage *filteredImage = [sepiaFilter imageByFilteringImage:inputImage];

3、常用内置滤镜速览

3.1、色彩调整

滤镜功能参数范围默认值
GPUImageBrightnessFilter亮度–1.0 … 1.00.0
GPUImageContrastFilter对比度0.0 … 4.01.0
GPUImageSaturationFilter饱和度0.0 … 2.01.0
GPUImageExposureFilter曝光–10.0 … 10.00.0

示例:提亮 25 %

GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
brightnessFilter.brightness = 0.25;
UIImage *brightenedImage = [brightnessFilter imageByFilteringImage:inputImage];

3.2、视觉效果

滤镜说明主要参数
GPUImageSepiaFilter怀旧棕褐色intensity0–1
GPUImageGrayscaleFilter灰度图
GPUImageMonochromeFilter单色映射intensity0–1、RGB 颜色
GPUImageFalseColorFilter伪彩色起始色、终止色

示例:80 % 蓝色单色

GPUImageMonochromeFilter *mono = [[GPUImageMonochromeFilter alloc] init];
mono.intensity = 0.8f;
mono.color = (GPUVector4){0.0f, 0.0f, 1.0f, 1.0f};
UIImage *blueMono = [mono imageByFilteringImage:inputImage];

4、多滤镜链式组合

GPUImagePicture *source = [[GPUImagePicture alloc] initWithImage:inputImage];

GPUImageContrastFilter *contrast = [[GPUImageContrastFilter alloc] init];
contrast.contrast = 1.5;

GPUImageSepiaFilter *sepia = [[GPUImageSepiaFilter alloc] init];
sepia.intensity = 0.8;

[source addTarget:contrast];
[contrast addTarget:sepia];
[sepia useNextFrameForImageCapture];

[source processImage];
UIImage *filteredImage = [sepia imageFromCurrentFramebuffer];

处理管线:原图 → 对比度 → 棕褐色 → 结果。

5、显示与保存

5.1、显示

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.image = filteredImage;
[self.view addSubview:imageView];

5.2、保存

// 保存到系统相册
UIImageWriteToSavedPhotosAlbum(filteredImage, nil, nil, nil);

// 保存为 JPEG 到沙盒
NSData *jpeg = UIImageJPEGRepresentation(filteredImage, 0.8);
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                      NSUserDomainMask, YES) firstObject];
[jpeg writeToFile:[path stringByAppendingPathComponent:@"filtered.jpg"]
      atomically:YES];

6、性能要点

iPhone 4 上简单滤镜可 快 100×于 CPU。

  • 多滤镜链保持数据在 GPU,可进一步减少内存拷贝。
  • 默认帧缓存自动复用,仅在 useNextFrameForImageCapture时保留输出,降低峰值内存。

7、小结

步骤关键 API
载入图片GPUImagePicture initWithImage:
单滤镜imageByFilteringImage:
链式滤镜addTarget:processImage
捕获结果imageFromCurrentFramebuffer

掌握以上基础后,即可进入实时视频滤镜的下一步学习。 

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

探索 GPUImage 音视频技术(3):基本图像过滤

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

(0)

相关推荐

发表回复

登录后才能评论