2

我正在尝试处理视频帧并从中提取集中的颜色。我正在使用,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代码,但它不应该发出快门声音,我无法禁用它。

4

1 回答 1

2

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

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

于 2016-02-05T15:30:39.683 回答