核心映像用户指南
Core Image提供的功能包括:
滤镜在语义上代表了某种能力,当它作用于一张图片时,可以通过变换得到另一张图片。
众所周知,图片是以像素为基本单位存储在电脑中的像素矩阵,只有通过图像处理单元GPU才能显示在屏幕上。数学上,滤镜其实就是一个矩阵,也叫卷积核,通常比一张图片的像素矩阵维数小很多。实际处理图片时,图片的像素矩阵和卷积核做卷积运算,最后输出一个“新”的图片。
顾名思义,滤波器链就是将多个滤波器链接在一起,上一个滤波器的输出作为下一个滤波器的输入。就像流水线一样,图片从第一个滤镜进入,经过处理后进入下一个滤镜,直到最后一个滤镜。这样,你就可以创造出要求更高的效果。
但实际上,岩心图像的处理逻辑略有不同。它不会让一张图片经历多个流程。出于性能考虑,Core Image会先将多个滤波器的卷积核合成一个,然后一次性得到最终结果。
简单来说,图像处理就是将某张图像应用到某个滤镜的过程。
在核心图像中,图片是CIImage,过滤器是CIFilter。滤波器的参数设置应通过KVC实现。同时,您还需要一个上下文对象CIContext,它保存所有相关的细节。因为有这么多细节,所以最好在合适的时候创建一个可重用的CIContext对象。
最基本的用法是只使用一个过滤器,如下所示。
CIImage只能用于CoreImage中的所有相关操作,而不能直接呈现给用户,因为CIImage只是一个用来制作图片的“菜谱”,实际上是一个操作流程,比如从URL读取图片文件,输出一个滤镜操作等。,只有在渲染或输出时才会执行。综上所述,CIImage可以通过以下方法创建:
Core Image中有大量的滤镜,随着系统的不断升级,新的滤镜也在不断加入。系统将其分为以下几类:
把这些功能结合在一起,基本就可以实现一个Photoshop了。
如前所述,当处理多个过滤器时,CoreImage会将多个过滤器合并为一个以提高性能,并在适当的时间完成处理。
例如,如果按部就班地处理,流程如下:
但如果将其合成为滤镜,其流程如下:
除了使用CFilter处理图片,Core Image还可以通过一些预定义的方法直接处理图片,会更加方便。例如:
在图像识别的过程中,如果要识别一个特定的物体,一般需要先检测轮廓,然后根据轮廓裁剪来识别物体,这样会更加高效和准确。如人脸、矩形等物体。在Core Image中,提供了开箱即用的轮廓检测功能,其中只能执行三种操作:人脸、矩形和文本。我们来看看人脸检测的用途:
使用后发现,只要图片包含的人少,结果就比较准确,图片清晰度降低,人多,结果就不一定准确。
为了提高应用程序的性能,使用核心映像时请注意以下细节: