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

时间:2015-09-12 10:39:36

标签: ios swift image-processing ios-camera

我正在尝试处理视频帧并从中提取浓缩颜色。我正在使用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 :(得分:1)

我自己也有同样的问题。只是它很早;无论出于何种原因,相机传感器从0开始,并且在第一帧被完全曝光之前,愿意在你想到之前给你画框。

解决方案:在您期待任何真实图像之前等待一秒钟。