我正在使用CIImage
,我需要通过减去128然后将每个像素除以128进行归一化。我该如何使用CIFilter
答案 0 :(得分:0)
不确定这是否可行,但是也许您可以应用两个具有静态颜色的混合通道,如下所示:
let gray = CIImage(color: .gray) // this should be 50% white, or 128/255
let subtracted = CIBlendKernel.subtract.apply(foreground: gray, background: inputImage)!
let normalized = CIBlendKernel.divide.apply(foreground: gray, background: subtracted)
请记住,您需要将CIContext的工作格式设置为支持负值的格式。
答案 1 :(得分:0)
您可以在vImage中实现此功能(假设您的源像素为UInt8
,而目标像素为Float
),而是使用数学将0 ... 255转换为-1 ... 1,使用查找表:
ramp
创建一个从-1到+1的256个Float
值的查找表。vImageLookupTable_Planar8toPlanarF
将UInt8
像素转换为-1 ... + 1单精度值填充目标。您可以将所有代码包装在CIImageProcessorKernel
中,以将其集成到CI工作流程中。请参阅: Reading From and Writing to Core Video Pixel Buffers 。