swift - 将 CIImage 乘以标量
问题描述
我正在使用一个CIImage
我需要通过减去 128 然后除以每个像素 128 来标准化的。我怎么能做到这一点CIFilter
解决方案
您可以在 vImage 中实现这一点(假设您的源像素UInt8
和目标像素是Float
),而是使用数学从 0...255 转换为 -1...1,使用查找表:
- 用于
ramp
创建Float
从 -1 到 +1 的 256 个值的查找表。 - 创建一个 vImage 缓冲区,该缓冲区引用您的图像数据,但其宽度为图像宽度乘以通道数(例如 RGBA 640 宽图像为 2560)。
- 创建一个与目标宽度相同的每通道 32 位 vImage 缓冲区。
- 使用转换为 -1...+1 单精度值
vImageLookupTable_Planar8toPlanarF
的像素填充目标。UInt8
您可以将所有这些代码包装在一个CIImageProcessorKernel
中,以将其集成到您的 CI 工作流程中。请参阅:读取和写入核心视频像素缓冲区。
推荐阅读
- ios - 在 Swift 中 RewardedView 的 userDidEarn 函数之后,我无法呈现某些内容
- electron - 电子构建时间变量
- if-statement - MIPS If 语句被忽略
- python - 当 Kivy TextInput 获得焦点时如何在 Windows 上激活 IME 选择面板
- android - android 应用程序如何向 Web 服务器证明其身份?
- c - 将限制指针分配给非限制指针的语义是什么?
- python - python中的会话管理
- c# - 在控制台应用程序中调用 Azure AD Web API 方法时出现 401 错误
- groovy - 我如何创建一个包含可以由 JMeter 中的所有线程更新的同步列表的属性?
- r - 平均具有头号名称的选定列