首页 > 解决方案 > 将 CIImage 乘以标量

问题描述

我正在使用一个CIImage我需要通过减去 128 然后除以每个像素 128 来标准化的。我怎么能做到这一点CIFilter

标签: swiftcore-imagecifilterciimage

解决方案


您可以在 vImage 中实现这一点(假设您的源像素UInt8和目标像素是Float),而是使用数学从 0...255 转换为 -1...1,使用查找表:

  1. 用于ramp创建Float从 -1 到 +1 的 256 个值的查找表。
  2. 创建一个 vImage 缓冲区,该缓冲区引用您的图像数据,但其宽度为图像宽度乘以通道数(例如 RGBA 640 宽图像为 2560)。
  3. 创建一个与目标宽度相同的每通道 32 位 vImage 缓冲区。
  4. 使用转换为 -1...+1 单精度值vImageLookupTable_Planar8toPlanarF的像素填充目标。UInt8

您可以将所有这些代码包装在一个CIImageProcessorKernel中,以将其集成到您的 CI 工作流程中。请参阅:读取和写入核心视频像素缓冲区


推荐阅读