首页 > 解决方案 > 如何更改从 CVPixelBuffer 创建的 CGImage 的像素颜色?

问题描述

我有一个简单的函数,它获取 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])
    }
}

我想让黑色完全透明,灰色的颜色变成绿色的颜色。可能吗?

标签: iosswift

解决方案


推荐阅读