Swift - captureOutput 帧提取的颜色总是接近黑色

Posted

技术标签:

【中文标题】Swift - captureOutput 帧提取的颜色总是接近黑色【英文标题】:Swift - captureOutput frame extracted color is always coming near to black 【发布时间】:2015-09-12 10:39:36 【问题描述】:

我正在尝试处理视频帧并从中提取集中的颜色。我使用的是AVCaptureStillImageOutput,但每次我拍摄一帧进行处理时它都会发出快门声,所以我切换到AVCaptureVideoDataOutput,现在处理每一帧。

这是我正在使用的代码:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) 
        currentFrame = self.convertImageFromCMSampleBufferRef(sampleBuffer);
        if let image = UIImage(CIImage: currentFrame)
            if let color = self.extractColor(image)                     
                // print the color code
            
        
    

    func convertImageFromCMSampleBufferRef(sampleBuffer:CMSampleBuffer) -> CIImage
        let pixelBuffer:CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer);
        var ciImage:CIImage = CIImage(CVPixelBuffer: pixelBuffer)
        return ciImage;
    

使用AVCaptureStillImageOutput,我得到了几乎正确的输出,但使用AVCaptureVideoDataOutput,即使相机视图处于强光下,这些值也总是接近黑色。我猜问题出在帧率或其他问题上,但无法弄清楚。

在最后几次测试中,这是我得到的唯一颜色代码#1b1f01

我很想使用原始的AVCaptureStillImageOutput 代码,但它不应该发出快门声,而且我无法禁用它。

【问题讨论】:

你找到解决这个问题的方法了吗? 【参考方案1】:

我自己也有同样的问题。只是时间还早;无论出于何种原因,相机传感器从 0 开始,并愿意在您认为的第一帧完全曝光之前为您提供帧。

解决方案:在您期待任何真实图像之前稍等片刻。

【讨论】:

以上是关于Swift - captureOutput 帧提取的颜色总是接近黑色的主要内容,如果未能解决你的问题,请参考以下文章

为啥从不调用 captureOutput?

AVCaptureAudioDataOutput 没有调用 AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput

Swift 的视频缓冲输出

AVCaptureVideoDataOutputSampleBufferDelegate.CaptureOutput 未调用

从 CMSampleBuffer 中提取数据以创建深层副本

在 captureOutput 上应用过滤器非常滞后并且在特定时间后崩溃