iOS8 Core Image In Swift:自己主动改善图像以及内置滤镜的使用

iOS8 Core Image In Swift:更复杂的滤镜

iOS8 Core Image In Swift:人脸检測以及马赛克

iOS8 Core Image In Swift:视频实时滤镜

在Core Image之前,我们尽管也能在视频录制或照片拍摄中对图像进行实时处理,但远没有Core Image使用起来方便。我们稍后会通过一个Demo回想一下曾经的做法,在此之前的样例都能够在模拟器和真机中測试,而这个样例由于会用到摄像头,所以仅仅能在真机上測试。

视频採集

我们要进行实时滤镜的前提,就是对摄像头以及UI操作的全然控制,那么我们将不能使用系统提供的Controller。须要自己去绘制一切。
先建立一个Single View Applicationproject(我命名名RealTimeFilter),还是在Storyboard里关掉Auto Layout和Size Classes。然后放一个Button进去,Button的事件连到VC的)

)

)

)

, bytesPerRow, grayColorSpace,  {

),

y: viewSize.))

{

, forKey: )

)

,

, green: , blue: , alpha: ),

, green: , blue: , alpha: ),

kCIInputCenterKey : CIVector(x: centerX, y: centerY)

])

let radialGradientOutputImage = radialGradient.outputImage.imageByCroppingToRect(inputImage.extent())

if maskImage == nil {

maskImage = radialGradientOutputImage

} else {

println(radialGradientOutputImage)

maskImage = CIFilter(name: "CISourceOverCompositing",

withInputParameters: [

kCIInputImageKey : radialGradientOutputImage,

kCIInputBackgroundImageKey : maskImage

]).outputImage

}

let blendFilter = CIFilter(name: "CIBlendWithMask")

blendFilter.setValue(fullPixellatedImage, forKey: kCIInputImageKey)

blendFilter.setValue(inputImage, forKey: kCIInputBackgroundImageKey)

blendFilter.setValue(maskImage, forKey: kCIInputMaskImageKey)

return blendFilter.outputImage

}

这上面的代码基本是复制上一篇里的代码,改的地方仅仅有两处:

  1. 把马赛克的效果变大,kCIInputScaleKey默认值为0.5,你能够把这行代码凝视掉后看效果
  2. 计算脸部的中心点和半径,计算方法和之前didOutputMetadataObjects这个delegate回调中的计算方法一样。复制过来就可以了
假设你看到我的上一篇《iOS8 Core Image In Swift:人脸检測以及马赛克》的话,这里面的实现方式应该就非常清晰了。
到此。对脸部的滤镜也处理好了,编译、执行,能够得到这种结果:

GitHub下载地址

我在GitHub上会保持更新。

參考资料:

1. http://weblog.invasivecode.com/post/18445861158/a-very-cool-custom-video-camera-with

2. https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/CoreImaging/ci_intro/ci_intro.html

3. http://en.wikipedia.org/wiki/YUV