코어 이미지를 사용하여 이미지를 이진화 (흑백 변환 만 가능) 할 수 있는지 궁금합니다.iOS의 코어 이미지가있는 이미지의 이진화
나는 OpenCV의와 GPUImage로했다,하지만 가능하다면, 애플 코어 이미지를 사용하도록 선호
코어 이미지를 사용하여 이미지를 이진화 (흑백 변환 만 가능) 할 수 있는지 궁금합니다.iOS의 코어 이미지가있는 이미지의 이진화
나는 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, 빠른 답변을 많이 주셔서 감사합니다! 맞춤 커널 솔루션을 시도 할 때 "치명적인 오류가 발생합니다 : 커널을 적용한 후 선택 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다"라는 생각이 들었습니다. 이유가 무엇입니까? – Pascal
다음 코드를 사용했습니다 :'''let ciKernel = CIColorKernel (string : "...")! let image = CIImage.init (image : inputImage)! let extent = image.extent let = [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 *입니다. 나는 내 대답을 편집 중입니다. 테스트 목적으로 적용 (withExtent : 인수)에 중단 점을 넣고 아무것도없는 것을 확인합니다. – dfd
이 (. 용서 내가 대답으로이 댓글을 게시 아차..) 예. CIPhotoEffectMono (https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPhotoEffectMono)를 확인하십시오. 나는 또한 흑백으로 페이드 (fade)하는 커스텀 CIColorKernel (GLSL 코드)을 작성했다. 나는 몇 분 안에 대답으로 두 가지를 올릴 것이다. – dfd