Как изменить цвета пикселей для CGImage, созданного из CVPixelBuffer? - PullRequest
1 голос
/ 10 июля 2020

У меня есть простая функция, которая получает CVPixelBuffer, превращает его в CGImage и назначает CALayer, отображаемому на экране.

func processResults(_ results: [Any]){
    if let observation = (results as? [VNPixelBufferObservation])?.first {
        var cgImage: CGImage?
        VTCreateCGImageFromCVPixelBuffer(observation.pixelBuffer, options: nil, imageOut: &cgImage)
        caLayer.contents = cgImage
        if caLayer.superlayer == nil {
            segmentationOverlay.addSublayer(caLayer)
        }
    }
}

Результат следующий:

введите описание изображения здесь

Как мне это получить?

lazy var request: VNCoreMLRequest = {
    let model = try! VNCoreMLModel(for: espnetv2_fp16_new().model)
    let request = VNCoreMLRequest(model: model) { request, error in
        DispatchQueue.main.async {
            if let results = request.results {
                self.processResults(results)
            }
        }
    }
    request.imageCropAndScaleOption = .scaleFill
    return request
}()

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    if let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
        let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:])
        try! handler.perform([request])
    }
}

Я хочу сделать черный цвет полностью прозрачным, а серый изменить на зеленый. Возможно ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...