画像を2値化するようなカスタムのCIFilterをつくりたいのですが、うまくいきません。
こちら(https://teratail.com/questions/34679)のエントリを参考に、以下のようなコードを書きました。
しかし、以下のinputImageとoutputImage(CustomFilterの適用後)にあるように、
うまく2値化されません。
原因のわかる方がいらっしゃいましたら、ご教授いただけると幸いです。
(Swift、GLSLともに初心者なので、やさしくお教え頂けると助かります)
Swift
1import Foundation 2import CoreImage 3 4class CustomFilter: CIFilter { 5 6 var inputImage: CIImage? 7 8 var thresholdKernel = CIColorKernel (string: 9 "kernel vec4 thresholdFilter(__sample image, __sample threshold)" + 10 "{" + 11 " vec3 col = image.rgb;" + 12 " float bright = 0.33333 * (col.r + col.g + col.b);" + 13 " float b = mix(0.0, 1.0, step(threshold, bright));" + 14 " return vec4(vec3(b), 1.0);" + 15 "}" 16 ) 17 18 override var outputImage: CIImage! { 19 20 guard let inputImage = inputImage, 21 thresholdKernel = thresholdKernel else 22 { 23 return nil 24 } 25 26 let blurred = inputImage.imageByApplyingFilter("CIBoxBlur", 27 withInputParameters: [kCIInputRadiusKey: 9]) 28 29 let extent = inputImage.extent 30 let arguments = [inputImage, blurred] 31 32 return thresholdKernel.applyWithExtent(extent, arguments: arguments) 33 34 } 35 36}
ViewController
1// ViewController 2・・・ 3override func viewDidLoad() { 4 super.viewDidLoad() 5 6 let filter = CustomFilter() 7 let inputCIImage = CIImage(image: UIImage(named: "inputImage.png")!) 8 filter.inputImage = inputCIImage 9 let outputCIImage = filter.outputImage 10 11 let imageView: UIImageView = UIImageView() 12 imageView.frame = CGRectMake(0, 0, 500, 500) 13 14 let outputImage = UIImage(CIImage: outputCIImage) 15 16 imageView.image = outputImage 17 18 self.view.addSubview(imageView) 19 }
inputImage
outputImage
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/19 05:31