我有两个CVImageBufferRef缓冲区,对应AVCaptureSession按顺序抓取的两个图像。我想比较两者,看看所有像素是否相同。为了循环帧缓冲区的所有像素并进行比较,我有这个:
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?感谢
答案 0 :(得分: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;
}