通过Color Swift过滤图像中的像素

时间:2018-06-29 13:28:17

标签: ios swift core-image apple-vision

我的项目正在使用Vision来识别视野中的特定矩形。我知道这个矩形会是某种颜色。在OpenCV中,有一个过滤器可让您按颜色过滤出像素,如here所示。

我是CoreImage框架的新手,但看不到任何可以实现此目标的过滤器。为此,是否有某种内置的过滤器(不一定必须在CoreImage中),还是我需要学习如何编写自己的过滤器?

1 个答案:

答案 0 :(得分:3)

目标

从给定链接下的信息可以理解的是,您希望将红色区域过滤为白色,并将所有其他区域过滤为黑色。

为此,可以使用CIColorKernel。

CIColorKernel

  

基于GPU的图像处理例程,该例程仅处理图像中的颜色信息,用于创建自定义核心图像滤镜。

请参阅https://developer.apple.com/documentation/coreimage/cicolorkernel

屏幕截图

此处的屏幕截图带有难看的背景色,可以更好地查看图像覆盖的区域。

enter image description here

在上方区域中显示输入图像。在下部区域中显示结果图像。

来源

import UIKit
import CoreImage

class ViewController: UIViewController {
    @IBOutlet weak var upperImageView: UIImageView!
    @IBOutlet weak var lowerImageView: UIImageView!


    let kernelString =
        """
        kernel vec4 thresholdFilter(__sample textureColor) {

            if (textureColor.r > 0.8 && textureColor.g < 0.1 && textureColor.b < 0.1) {
                textureColor.rgb = vec3(1.0, 1.0, 1.0);
            } else {
                textureColor.rgb = vec3(0.0, 0.0, 0.0);
            }

            return textureColor;
        }
        """

    let kernel: CIColorKernel

    required init?(coder aDecoder: NSCoder) {
        self.kernel = CIColorKernel(source: kernelString)!
        super.init(coder: aDecoder)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.upperImageView.image = UIImage(named: "example.png")
    }


    @IBAction func onFilter(_ sender: Any) {
        guard let inputImage = upperImageView.image else { return }
        guard let ciInputImage = CIImage(image: inputImage) else { return }

        let ciImageFiltered = self.kernel.apply(
            extent: ciInputImage.extent,
            arguments: [ciInputImage])

        let filteredImage = UIImage(ciImage: ciImageFiltered!)
        self.lowerImageView.image = filteredImage
    }
}

这是您要找的吗?