版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.01.28 |
前言
Core Image是IOS5中新加入的一个框架,里面提供了强大高效的图像处理功能,用来对基于像素的图像进行操作与分析。还提供了很多强大的滤镜,可以实现你想要的效果,下面我们就一起解析一下这个框架。感兴趣的可以参考上面几篇。
1. Core Image框架详细解析(一) —— 基本概览
2. Core Image框架详细解析(二) —— Core Image滤波器参考
3. Core Image框架详细解析(三) —— 关于Core Image
4. Core Image框架详细解析(四) —— Processing Images处理图像(一)
5. Core Image框架详细解析(五) —— Processing Images处理图像(二)
6. Core Image框架详细解析(六) —— 图像中的面部识别Detecting Faces in an Image(一)
7. Core Image框架详细解析(七) —— 自动增强图像 Auto Enhancing Images
8. Core Image框架详细解析(八) —— 查询系统中的过滤器 Querying the System for Filters
9. Core Image框架详细解析(九) —— 子类化CIFilter:自定义效果的配方 Subclassing CIFilter: Recipes for Custom Effects(一)
Anonymous Faces Filter Recipe - 让面孔无法识别过滤Recipe
在图像中查找面部并对它们进行像素化,使其无法识别。
要创建一个匿名面孔过滤器:
- 创建图像的像素化版本。
- 使用在图像中检测到的脸部构建遮罩。
- 使用蒙版将像素化图像与原始图像混合。
以下部分显示如何执行每个步骤。
1. Create a Pixellated version of the image - 创建图像的像素化版本
设置CIPixellate过滤器的输入参数如下:
- 将
inputImage
设置为包含面部的图像。 - 将
inputScale
设置为max(width, height)/60
或其他看起来令人愉快的值,其中宽度和高度是指图像的宽度和高度。
2. Build a Mask From the Faces Detected in the Image - 从图像中检测到的脸部构建遮罩
使用CIDetector
类来查找图像中的面部。 对于每一张脸:
- 使用CIRadialGradient过滤器来创建围绕脸部的圆。
- 使用CISourceOverCompositing过滤器将渐变添加到遮罩。
// Listing 5-5 Building a mask for the faces detected in an image
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:nil
options:nil];
NSArray *faceArray = [detector featuresInImage:image options:nil];
// Create a green circle to cover the rects that are returned.
CIImage *maskImage = nil;
for (CIFeature *f in faceArray) {
CGFloat centerX = f.bounds.origin.x + f.bounds.size.width / 2.0;
CGFloat centerY = f.bounds.origin.y + f.bounds.size.height / 2.0;
CGFloat radius = MIN(f.bounds.size.width, f.bounds.size.height) / 1.5);
CIFilter *radialGradient = [CIFilter filterWithName:@"CIRadialGradient" withInputParameters:@{
@"inputRadius0": @(radius),
@"inputRadius1": @(radius + 1.0f),
@"inputColor0": [CIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0],
@"inputColor1": [CIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0],
kCIInputCenterKey: [CIVector vectorWithX:centerX Y:centerY],
}];
CIImage *circleImage = [radialGradient valueForKey:kCIOutputImageKey];
if (nil == maskImage)
maskImage = circleImage;
else
maskImage = [[CIFilter filterWithName:@"CISourceOverCompositing" withInputParameters:@{
kCIInputImageKey: circleImage,
kCIInputBackgroundImageKey: maskImage,
}] valueForKey:kCIOutputImageKey];
}
3. Blend the Pixellated Image, the Mask, and the Original Image - 混合像素化图像,蒙版和原始图像
将CIBlendWithMask
过滤器的输入参数设置为以下内容:
- 将
inputImage
设置为图像的像素化版本。 - 将
inputBackgroundImage
设置为原始图像。 - 将
inputMaskImage
设置为合成的绿色圆圈。
Pixellate Transition Filter Recipe - Pixellate过渡过滤器Recipe
通过像素化每个图像从一个图像转换到另一个图像。
要创建一个像素转换滤镜:
- 使用
CIDissolveTransition
在源图像和目标图像之间切换。 -
Pixellate
转换过滤器的结果。
以下部分显示如何执行每个步骤。
1. Create a Dissolve Transition - 创建一个Dissolve转换
设置CIDissolveTransition
过滤器的输入参数如下:
- 将
inputImage
设置为要转换的图像。 - 将
inputTagetImage
设置为要转换的图像。 - 将
inputTime
设置为类似于min(max(2 *(time-0.25),0),1)
的值,这是一个斜率函数,它夹在两个值之间。
2. Pixellate the Result of the Transition - 过渡的结果像素化
设置CIPixellate
过滤器,通过将其输入参数设置如下,达到随着时间的推移改变像素的比例的效果。
- 将
inputImage
设置为CIDissolveTransition
过滤器的输出图像。 - 设置
inputScale
通过提供三角函数的值随时间变化:90 *(1-2 * abs(时间-0.5))
。 - 使用
inputCenter
的默认值。
Old Film Filter Recipe - 怀旧过滤Recipe
降低视频图像的质量,使其看起来像一个旧的,磨损的模拟电影。
要创建一个怀旧效果old-film
的过滤器:
- 将
CISepiaTone
过滤器应用于原始视频图像。 - 创建随机变化的白色斑点。
- 创建随机变化的黑暗划痕。
- 将斑点和划痕复合到棕褐色调的图像上。
以下部分显示如何执行每个步骤。
1. Apply Sepia to the Video Image - 将棕褐色应用于视频图像
设置CISepiaTone
的输入参数如下:
- 将
inputImage
设置为效果要应用的视频图像。 - 将
inputIntensity
设置为1.0。
2. Create Randomly Varying White Specks - 创造随机变化的白色斑点
使用产生彩色噪音的CIRandomGenerator
过滤器。 它没有任何输入参数。
要处理噪点,以便只得到白色斑点,请使用CIColorMatrix
滤镜,输入参数设置如下:
- 将
inputImage
设置为由随机生成器生成的输出。 - 将
inputRVector,inputGVector
和inputBVector
设置为(0,1,0,0)
。 - 将
inputBiasVector
设置为(0,0,0,0)
。
通过如下设置的过滤器的输入参数,使用CISourceOverCompositing
过滤器将斑点与视频图像混合:
- 将
inputImage
设置为由CIColorMatrix
过滤器生成的白色斑点图像。 - 将
inputBackgroundImage
设置为由CISepiaTone
过滤器生成的图像。
3. Create Randomly Varying Dark Scratches - 创造随机变黑暗的划痕
再次使用CIRandomGenerator
过滤器生成彩色噪音。 然后使用带有这些输入参数的CIAffineTransform
过滤器处理其输出:
- 将
inputImage
设置为由CIRandomGenerator
过滤器生成的噪声。 - 将
inputTransform
设置为scale将x缩放1.5,将y缩放25,这会使像素变粗而长,但它们仍将被着色。
使用CIAffineTransform
的替代方法是使用imageByApplyingTransform:方法来转换噪声。
要使像素变暗,请按如下所示设置CIColorMatrix
滤镜的输入参数:
- 将
inputImage
设置为转换的视频图像。 - 将
inputRVector
设置为(4,0,0,0)
。 - 将
inputGVector,inputBVector和inputAVector
设置为(0,0,0,0)
。 - 将
inputBiasVector
设置为(0,1,1,1)
。
这导致青色的划痕。
要使划痕变暗,请将CIMinimumComponent
过滤器应用于青色划痕。 此滤镜使用r,g,b值的最小值生成灰度图像。
4. Composite the Specks and Scratches to the Sepia Video Image - 将斑点和划痕复合到棕褐色视频图像
设置CIMultiplyCompositing
过滤器的输入参数如下:
- 设置
inputBackgroundImage
为处理的视频图像(棕褐色调,白色斑点)。 - 设置
inputImage
为黑色划痕,即来自CIMinimumComponent
过滤器的输出
后记
本篇已结束,后面更精彩~~~