我想知道是否可以用核心图像对图像进行二值化(仅转换为黑白图像)?
我用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!)
}
再说一次,加些警卫等。