Ios 如何更改从CVPixelBuffer创建的CGImage的像素颜色?
我有一个简单的函数,可以获取CVPixelBuffer,将其转换为CGImage并分配给屏幕上显示的CALayerIos 如何更改从CVPixelBuffer创建的CGImage的像素颜色?,ios,swift,Ios,Swift,我有一个简单的函数,可以获取CVPixelBuffer,将其转换为CGImage并分配给屏幕上显示的CALayer func processResults(_ results: [Any]){ if let observation = (results as? [VNPixelBufferObservation])?.first { var cgImage: CGImage? VTCreateCGImageFromCVPixelBuffer(observa
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])
}
}
我想让黑色完全透明,灰色变成绿色。有可能吗?您的视频捕获在没有视觉后处理的情况下工作吗?没有,我想。。。它不…嗯,我做了类似的事情,它有很多代码。您的captureOutput函数应该配置为在AVFoundation的CALayer上呈现内容。只有这样,您才应该添加一些func,它使用视觉进行某些对象检测。只有这样,您才能添加过滤后的结果,以接收带有绿色像素的半透明图像。您可以将解决方案发布在此处或通过电子邮件发布吗?不幸的是,很难看到代码片段中的哪个阶段被破坏。尝试提取问题以获得更好的结果。您的视频捕获在没有视觉后处理的情况下工作吗?不,我认为。。。它不…嗯,我做了类似的事情,它有很多代码。您的captureOutput函数应该配置为在AVFoundation的CALayer上呈现内容。只有这样,您才应该添加一些func,它使用视觉进行某些对象检测。只有这样,您才能添加过滤后的结果,以接收带有绿色像素的半透明图像。您可以将解决方案发布在此处或通过电子邮件发布吗?不幸的是,很难看到代码片段中的哪个阶段被破坏。尝试提取问题以获得更好的结果。