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 に答える