我想知道是否可以使用Core Image對圖像進行二進制化(僅轉換爲黑白)?在iOS上使用Core Image上的二進制圖片
我跟OpenCV的和GPUImage做到了,但我們更希望它使用蘋果的核心形象,如果可能的話
我想知道是否可以使用Core Image對圖像進行二進制化(僅轉換爲黑白)?在iOS上使用Core Image上的二進制圖片
我跟OpenCV的和GPUImage做到了,但我們更希望它使用蘋果的核心形象,如果可能的話
是。您至少有兩個選項,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
調用中。
雨燕代碼:
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!)
}
再次,加入一些衛士等
嗨dfd,非常感謝您的快速響應!在嘗試定製內核解決方案時,在應用內核之後,我得到了「致命錯誤:意外地發現了零,同時展開了一個可選值」 - 你有一個想法,爲什麼? – Pascal
我用下面的代碼:'''let ciKernel = CIColorKernel(string:「...」)!讓image = CIImage.init(image:inputImage)!使用參數= [inputImage,inputColorFade] let outputImage = ciKernel.apply(withExtent:extent,arguments:arguments)! let context = CIContext(options:nil) let cgimg = context.createCGImage(outputImage,from :((outputImage.extent)) return UIImage(cgImage:cgimg!)''' – Pascal
啊。我的錯。未經測試的代碼從工作應用程序複製。它不是* inputImage *但* image *。我在編輯我的答案。出於測試目的,在apply(withExtent:arguments)上放置一個斷點並檢查沒有其他東西是零。 – dfd
(原諒我張貼了這個意見作爲答案哎呀。)是的。檢查CIPhotoEffectMono(https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPhotoEffectMono)。我還寫了一個自定義的CIColorKernel(GLSL代碼),可以「淡入」黑白。我會在幾分鐘後發佈這兩個答案。 – dfd