7

iPhone カメラを使用してライブ ビデオをキャプチャし、オブジェクト認識を行うネットワークにピクセル バッファを供給しています。AVCaptureSession 関連するコードは次のとおりです(これはかなり標準的なため、設定などのコードは投稿しません。)

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

    OSType sourcePixelFormat = CVPixelBufferGetPixelFormatType( pixelBuffer );
    int doReverseChannels;
    if ( kCVPixelFormatType_32ARGB == sourcePixelFormat ) {
        doReverseChannels = 1;
    } else if ( kCVPixelFormatType_32BGRA == sourcePixelFormat ) {
        doReverseChannels = 0;
    } else {
        assert(false);
    }

    const int sourceRowBytes = (int)CVPixelBufferGetBytesPerRow( pixelBuffer );
    const int width = (int)CVPixelBufferGetWidth( pixelBuffer );
    const int fullHeight = (int)CVPixelBufferGetHeight( pixelBuffer );
    CVPixelBufferLockBaseAddress( pixelBuffer, 0 );
    unsigned char* sourceBaseAddr = CVPixelBufferGetBaseAddress( pixelBuffer );
    int height;
    unsigned char* sourceStartAddr;
    if (fullHeight <= width) {
        height = fullHeight;
        sourceStartAddr = sourceBaseAddr;
    } else {
        height = width;
        const int marginY = ((fullHeight - width) / 2);
        sourceStartAddr = (sourceBaseAddr + (marginY * sourceRowBytes));
    }
}

次に、ネットワークはsourceStartAddrwidthheightsourceRowBytes&doReverseChannelsを入力として受け取ります。

私の質問は次のとおりです。画像データの一部をすべて白い「ピクセル」で置き換えまたは削除する最も簡単で効率的な方法は何ですか? ピクセル バッファ データの一部を直接上書きすることは可能ですか。

私はこのピクセル バッファがどのように機能するかについて非常に初歩的なことしか理解していないので、ここで非常に基本的なことが抜けていたら申し訳ありません。私が Stackoverflow で見つけた私のものに最も関連する質問は、ビデオ フレームにテキストを追加するためにaが使用されるthis oneでした。EAGLContextこれは、単一の画像に対してのみこの置換を必要とする私の目的では実際に機能しますが、この手順をすべてのビデオ フレームに適用するとパフォーマンスが低下すると思います。別の方法があるかどうかを確認したいと思います。ここで何か助けていただければ幸いです。

4

3 に答える 3