我想知道是否可以用核心图像对图像进行二值化(仅转换为黑白图像)?
我用OpenCV和GPUImage做的,但是如果可能的话,我希望它使用Apple Core映像

最佳答案

对。您至少有两个选项,CIPhotoEffectMono或一个小的自定义CIColorKernel。
CIPhotoEffectMono:

func createMonoImage(image:UIImage) -> UIImage {
    let filter = CIFilter(name: "CIPhotoEffectMono")
    filter!.setValue(CIImage(image: image), forKey: "inputImage")
    let outputImage = filter!.outputImage
    let cgimg = ciCtx.createCGImage(outputImage!, from: (outputImage?.extent)!)
    return UIImage(cgImage: cgimg!)
}

注意,我写的很快,你可能需要收紧零回报的东西。
CIColorKernel公司:
FadeToBW GLSL(0.0因子全色,1.0因子无颜色):
kernel vec4 fadeToBW(__sample s, float factor) {
    vec3 lum = vec3(0.299,0.587,0.114);
    vec3 bw = vec3(dot(s.rgb,lum));
    vec3 pixel = s.rgb + (bw - s.rgb) * factor;
    return vec4(pixel,s.a);
}

下面的代码将其作为一个名为FadeToBW.cikernel的文件打开。您还可以将其作为字符串直接发送到openKernelFile调用中。
Swift代码:
func createMonoImage(image:UIImage, inputColorFade:NSNumber) -> UIImage {
    let ciKernel = CIColorKernel(string: openKernelFile("FadeToBW"))
    let extent = image.extent
    let arguments = [image, inputColorFade]
    let outputImage = ciKernel.applyWithExtent(extent, arguments: arguments)
    let cgimg = ciCtx.createCGImage(outputImage!, from: (outputImage?.extent)!)
    return UIImage(cgImage: cgimg!)
}

再说一次,加些警卫等。

10-08 09:24