区块链技术博客
www.b2bchain.cn

Core Image使用总结求职学习资料

本文介绍了Core Image使用总结求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

1. 简介

Core Image 是一种为静态图像和视频提供近似实时处理和分析的技术,它可以使用 GPU/CPU 的方式对图像进行处理。输入可以是Core Graphics 、Core Video 和 Image I/O 的对象,Core Image 提供了简洁的 API 给用户,即使不了解 OpenGL 、OpenGLES 和 Metal也能利用到GPU能力,不了解GCD也能发挥多线程的好处。

Core Image与操作系统的关系图

Core Image使用总结

Core Image提供了以下能力

  • 多种类型的内置滤镜,数量高达230个以上
  • 支持组合多个滤镜形成自定义的滤镜效果
  • 支持创建运行GPU上的自定义滤镜
  • 支持自动图像增强(分析图片提供一组滤镜)
  • 基于反馈的图像处理能力,CIImageAccumulator类支持画笔能力
  • 特征识别能力(人脸区域(视频也可以跟踪)和表情状态、条形码识别、文本识别等)
    • 疑问:为啥人脸区域检测在Core Image里呢?
  • MacOS上还提供了打包自定义滤镜能力,提供给其他APP使用

使用场景

用于图像和视频的处理;也可以与SpriteKit和SceneKit配合使用
Core Image使用总结

查询滤镜

方法1:官网查询内置滤镜列表

  • Core Image Filter Reference

方法2:framework中查询内置滤镜列表

let filterNames = CIFilter.filterNames(inCategories: nil) // or let filterNames = CIFiter.filterNames(inCategory: nil) // 返回230种滤镜名字

Core Image使用总结

方法3:组合多种滤镜-构建自定义滤镜

  • Quartz Composer下载地址(Graphics Tools for Xcode 9.3)
  • 用法:(注意选中滤镜右键设置输入参数源)
    Core Image使用总结

2. 使用Core Image

import CoreImage  let context = CIContext()                                           // 1  let image = CIImage(contentsOfURL: myURL)                           // 2 filter.setValue(image, forKey: kCIInputImageKey)  let filter = CIFilter(name: "CISepiaTone")!                         // 3 filter.setValue(0.8, forKey: kCIInputIntensityKey)  let result = filter.outputImage!                                    // 4 let cgImage = context.createCGImage(result, from: result.extent)    // 5

1.创建Core Image的上下文CIContext;
2.创建输入图片,输入源可以是UIImage、文件、纹理、CVPixelBuffer等等;
3.创建所需要的滤镜,并设置参数;
4.获取输出图片,此时输出图片尚未渲染合成,只是组合状态;
5.渲染输出图片;

  • CIContext、CIImage 不可变参数,线程安全;
  • CIFilter 没有线程安全,必要时可以通过CIImage来传递;

上下文

  • 创建CIContext是比较昂贵的,尽量创建一个后重复使用;
  • 直接创建CIContext() ,系统会根据支持的硬件能力选择CPU和GPU;
  • 创建时可以指定OpenGLESMetalCPU渲染方式;
    • GPU(OpenGLESMetal):高性能,实时渲染,但不支持后台渲染,也受到纹理尺寸限制;
    • CPU高可靠性和精度,非实时性,后台和前台均能够运行;

输入图片

  • 输入图片源可以是Core GraphicsCore VideoImage I/O的对象。
  • iPhone大部分机型 OpenGLES下纹理大小支持4096,Metal支持8192,大图如果超出限制,部分filter支持拆分成几个小图处理,可以通过context.inputImageMaximumSize()查询;
  • CIImage对小尺寸的图片初始化时进行解码,大尺寸的延迟解码的现象;
init(cgImage: CGImage, options: [CIImageOption : Any]?)  init?(contentsOf: URL, options: [CIImageOption : Any]?)  init?(data: Data, options: [CIImageOption : Any]?)  init(cvImageBuffer: CVImageBuffer, options: [CIImageOption : Any]?)  init(texture: UInt32, size: CGSize, flipped: Bool, options: [CIImageOption : Any]?)  init?(mtlTexture: MTLTexture, options: [CIImageOption : Any]?)  init(ioSurface: IOSurfaceRef, options: [CIImageOption : Any]?)

输入参数

  • 查询参数地址

  • 例如CIBoxBlur,标注功能、参数类型、默认值、参数范围、输出结果样图等:
    Core Image使用总结

1. 简介

Core Image 是一种为静态图像和视频提供近似实时处理和分析的技术,它可以使用 GPU/CPU 的方式对图像进行处理。输入可以是Core Graphics 、Core Video 和 Image I/O 的对象,Core Image 提供了简洁的 API 给用户,即使不了解 OpenGL 、OpenGLES 和 Metal也能利用到GPU能力,不了解GCD也能发挥多线程的好处。

Core Image与操作系统的关系图

Core Image使用总结

Core Image提供了以下能力

  • 多种类型的内置滤镜,数量高达230个以上
  • 支持组合多个滤镜形成自定义的滤镜效果
  • 支持创建运行GPU上的自定义滤镜
  • 支持自动图像增强(分析图片提供一组滤镜)
  • 基于反馈的图像处理能力,CIImageAccumulator类支持画笔能力
  • 特征识别能力(人脸区域(视频也可以跟踪)和表情状态、条形码识别、文本识别等)
    • 疑问:为啥人脸区域检测在Core Image里呢?
  • MacOS上还提供了打包自定义滤镜能力,提供给其他APP使用

使用场景

用于图像和视频的处理;也可以与SpriteKit和SceneKit配合使用
Core Image使用总结

查询滤镜

方法1:官网查询内置滤镜列表

  • Core Image Filter Reference

方法2:framework中查询内置滤镜列表

let filterNames = CIFilter.filterNames(inCategories: nil) // or let filterNames = CIFiter.filterNames(inCategory: nil) // 返回230种滤镜名字

Core Image使用总结

方法3:组合多种滤镜-构建自定义滤镜

  • Quartz Composer下载地址(Graphics Tools for Xcode 9.3)
  • 用法:(注意选中滤镜右键设置输入参数源)
    Core Image使用总结

2. 使用Core Image

import CoreImage  let context = CIContext()                                           // 1  let image = CIImage(contentsOfURL: myURL)                           // 2 filter.setValue(image, forKey: kCIInputImageKey)  let filter = CIFilter(name: "CISepiaTone")!                         // 3 filter.setValue(0.8, forKey: kCIInputIntensityKey)  let result = filter.outputImage!                                    // 4 let cgImage = context.createCGImage(result, from: result.extent)    // 5

1.创建Core Image的上下文CIContext;
2.创建输入图片,输入源可以是UIImage、文件、纹理、CVPixelBuffer等等;
3.创建所需要的滤镜,并设置参数;
4.获取输出图片,此时输出图片尚未渲染合成,只是组合状态;
5.渲染输出图片;

  • CIContext、CIImage 不可变参数,线程安全;
  • CIFilter 没有线程安全,必要时可以通过CIImage来传递;

上下文

  • 创建CIContext是比较昂贵的,尽量创建一个后重复使用;
  • 直接创建CIContext() ,系统会根据支持的硬件能力选择CPU和GPU;
  • 创建时可以指定OpenGLESMetalCPU渲染方式;
    • GPU(OpenGLESMetal):高性能,实时渲染,但不支持后台渲染,也受到纹理尺寸限制;
    • CPU高可靠性和精度,非实时性,后台和前台均能够运行;

输入图片

  • 输入图片源可以是Core GraphicsCore VideoImage I/O的对象。
  • iPhone大部分机型 OpenGLES下纹理大小支持4096,Metal支持8192,大图如果超出限制,部分filter支持拆分成几个小图处理,可以通过context.inputImageMaximumSize()查询;
  • CIImage对小尺寸的图片初始化时进行解码,大尺寸的延迟解码的现象;
init(cgImage: CGImage, options: [CIImageOption : Any]?)  init?(contentsOf: URL, options: [CIImageOption : Any]?)  init?(data: Data, options: [CIImageOption : Any]?)  init(cvImageBuffer: CVImageBuffer, options: [CIImageOption : Any]?)  init(texture: UInt32, size: CGSize, flipped: Bool, options: [CIImageOption : Any]?)  init?(mtlTexture: MTLTexture, options: [CIImageOption : Any]?)  init(ioSurface: IOSurfaceRef, options: [CIImageOption : Any]?)

输入参数

  • 查询参数地址

  • 例如CIBoxBlur,标注功能、参数类型、默认值、参数范围、输出结果样图等:
    Core Image使用总结

1. 简介

Core Image 是一种为静态图像和视频提供近似实时处理和分析的技术,它可以使用 GPU/CPU 的方式对图像进行处理。输入可以是Core Graphics 、Core Video 和 Image I/O 的对象,Core Image 提供了简洁的 API 给用户,即使不了解 OpenGL 、OpenGLES 和 Metal也能利用到GPU能力,不了解GCD也能发挥多线程的好处。

Core Image与操作系统的关系图

Core Image使用总结

Core Image提供了以下能力

  • 多种类型的内置滤镜,数量高达230个以上
  • 支持组合多个滤镜形成自定义的滤镜效果
  • 支持创建运行GPU上的自定义滤镜
  • 支持自动图像增强(分析图片提供一组滤镜)
  • 基于反馈的图像处理能力,CIImageAccumulator类支持画笔能力
  • 特征识别能力(人脸区域(视频也可以跟踪)和表情状态、条形码识别、文本识别等)
    • 疑问:为啥人脸区域检测在Core Image里呢?
  • MacOS上还提供了打包自定义滤镜能力,提供给其他APP使用

使用场景

用于图像和视频的处理;也可以与SpriteKit和SceneKit配合使用
Core Image使用总结

查询滤镜

方法1:官网查询内置滤镜列表

  • Core Image Filter Reference

方法2:framework中查询内置滤镜列表

let filterNames = CIFilter.filterNames(inCategories: nil) // or let filterNames = CIFiter.filterNames(inCategory: nil) // 返回230种滤镜名字

Core Image使用总结

方法3:组合多种滤镜-构建自定义滤镜

  • Quartz Composer下载地址(Graphics Tools for Xcode 9.3)
  • 用法:(注意选中滤镜右键设置输入参数源)
    Core Image使用总结

2. 使用Core Image

import CoreImage  let context = CIContext()                                           // 1  let image = CIImage(contentsOfURL: myURL)                           // 2 filter.setValue(image, forKey: kCIInputImageKey)  let filter = CIFilter(name: "CISepiaTone")!                         // 3 filter.setValue(0.8, forKey: kCIInputIntensityKey)  let result = filter.outputImage!                                    // 4 let cgImage = context.createCGImage(result, from: result.extent)    // 5

1.创建Core Image的上下文CIContext;
2.创建输入图片,输入源可以是UIImage、文件、纹理、CVPixelBuffer等等;
3.创建所需要的滤镜,并设置参数;
4.获取输出图片,此时输出图片尚未渲染合成,只是组合状态;
5.渲染输出图片;

  • CIContext、CIImage 不可变参数,线程安全;
  • CIFilter 没有线程安全,必要时可以通过CIImage来传递;

上下文

  • 创建CIContext是比较昂贵的,尽量创建一个后重复使用;
  • 直接创建CIContext() ,系统会根据支持的硬件能力选择CPU和GPU;
  • 创建时可以指定OpenGLESMetalCPU渲染方式;
    • GPU(OpenGLESMetal):高性能,实时渲染,但不支持后台渲染,也受到纹理尺寸限制;
    • CPU高可靠性和精度,非实时性,后台和前台均能够运行;

输入图片

  • 输入图片源可以是Core GraphicsCore VideoImage I/O的对象。
  • iPhone大部分机型 OpenGLES下纹理大小支持4096,Metal支持8192,大图如果超出限制,部分filter支持拆分成几个小图处理,可以通过context.inputImageMaximumSize()查询;
  • CIImage对小尺寸的图片初始化时进行解码,大尺寸的延迟解码的现象;
init(cgImage: CGImage, options: [CIImageOption : Any]?)  init?(contentsOf: URL, options: [CIImageOption : Any]?)  init?(data: Data, options: [CIImageOption : Any]?)  init(cvImageBuffer: CVImageBuffer, options: [CIImageOption : Any]?)  init(texture: UInt32, size: CGSize, flipped: Bool, options: [CIImageOption : Any]?)  init?(mtlTexture: MTLTexture, options: [CIImageOption : Any]?)  init(ioSurface: IOSurfaceRef, options: [CIImageOption : Any]?)

输入参数

  • 查询参数地址

  • 例如CIBoxBlur,标注功能、参数类型、默认值、参数范围、输出结果样图等:
    Core Image使用总结

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Core Image使用总结求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们