2015-09-12 3 views
1

Я пытаюсь обработать видеокадры и извлечь из нее концентрированный цвет. Я использовал AVCaptureStillImageOutput, но он делал звук затвора каждый раз, когда я принимал кадр для обработки, поэтому я переключился на AVCaptureVideoDataOutput и теперь обрабатывал каждый кадр по мере его поступления.Swift - captureOutput рама, выделенная цветом, всегда приближается к черному

Вот код, я использую:

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 код, но он не должен сделать звук затвора, и я не в состоянии вывести его из строя.

+0

Вы когда-нибудь находили решение этой проблемы? – Cari95

ответ

1

Если бы эта проблема была сама. Просто было очень рано; по какой-либо причине датчик камеры начинается с 0 и готов предоставить вам кадры до того, что вы думаете, поскольку первый кадр полностью открыт.

Решение: подождите несколько секунд, прежде чем ожидать каких-либо реальных изображений.