0

AVCaptureSession によって順番に取得された 2 つの画像に対応する 2 つの CVImageBufferRef バッファーがあります。両方を比較して、すべてのピクセルが同じかどうかを確認したいと思います。フレームバッファのすべてのピクセルをループして比較するには、次のようにします。

unsigned char *pixelA = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBufferA);
unsigned char *pixelB = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBufferB);


- (BOOL) isBuffer:(unsigned char *)pixelA equalToBuffer:(unsigned char *)pixelB {
    for( int row = 0; row < bufferHeight; row++ ) {
        for( int column = 0; column < bufferWidth; column++ ) {

            if ((pixelA[0] != pixelB[0]) ||
                (pixelA[1] != pixelB[1]) ||
                (pixelA[2] != pixelB[2]) ){
                return NO; 
                // means at some point pixelA is not equal to pixelB, so
                // pixelBufferA is not equal to pixelBufferB
            }

            pixelA += BYTES_PER_PIXEL;
            pixelB += BYTES_PER_PIXEL;

        }
    }

        // if the method reached here, pixelBufferA is equal to pixelBufferB, so
        return YES; // are equal
}

比べてみると明らかに落ちています。pixelA のすべての値を pixelB と比較するにはどうすればよいですか? ありがとう

4

1 に答える 1

1

私はあなたがしていることを実際に行ったことはありませんが、バッファを一度に比較できない理由はありますmemcmpか?

- (BOOL) isBuffer:(unsigned char*)pixelA equalToBuffer:(unsigned char*)pixelB
{
    size_t bufferSize = bufferWidth * bufferHeight * BYTES_PER_PIXEL;

    return memcmp( pixelA, pixelB, bufferSize ) == 0;
}
于 2012-11-11T03:30:14.030 に答える