Фильтровать пиксели в изображении по Color Swift - PullRequest
0 голосов
/ 29 июня 2018

Мой проект использует Vision для определения определенного прямоугольника в поле зрения. Я знаю, что этот прямоугольник будет определенного цвета. В OpenCV есть фильтр, который позволяет фильтровать пиксели по цвету, как показано здесь .

Я новичок в инфраструктуре CoreImage, но я не вижу никаких фильтров, которые бы достигли этой цели. Для этого есть какой-то встроенный фильтр (он не обязательно должен быть в CoreImage), или мне нужно научиться писать свои собственные?

1 Ответ

0 голосов
/ 30 июня 2018

Цель

Что я могу понять из информации по данной ссылке, вы хотели бы отфильтровать красные области на белые и все остальные области на черные.

Для этого можно использовать CIColorKernel.

CIColorKernel

Процедура обработки изображений на основе графического процессора, которая обрабатывает только информацию о цвете в изображениях, используемую для создания пользовательских фильтров Core Image.

см. 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
    }
}

Это то, что вы ищете?

...