Получение нужных данных из CVPixelBuffer. Ссылка

У меня есть программа, которая просматривает вход камеры в реальном -времени и получает значение цвета среднего пикселя.. Я использую метод captureOutput:, чтобы получить CMSampleBuffer из вывода AVCaptureSession (, который читается как CVPixelBuffer), а затем я получаю значения rgb пикселя, используя следующий код :

// Get a CMSampleBuffer's Core Video image buffer for the media data
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
// Lock the base address of the pixel buffer
CVPixelBufferLockBaseAddress(imageBuffer, 0); 

// Get the number of bytes per row for the pixel buffer
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
// Get the pixel buffer width and height
size_t width = CVPixelBufferGetWidth(imageBuffer); 
size_t height = CVPixelBufferGetHeight(imageBuffer); 
unsigned char* pixel = (unsigned char *)CVPixelBufferGetBaseAddress(imageBuffer);

NSLog(@"Middle pixel: %hhu", pixel[((width*height)*4)/2]);
int red = pixel[(((width*height)*4)/2)+2];
int green = pixel[(((width*height)*4)/2)+1];
int blue = pixel[((width*height)*4)/2];
int alpha = 1;

UIColor *color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:(blue/255.0f) alpha:(alpha)];

. формула ((ширина*высота)*4)/2 дала бы мне средний пиксель, но она дает мне верхний средний пиксель изображения. Мне интересно, какую формулу мне нужно использовать для доступа к пикселю в середине экрана. Я немного застрял, потому что я действительно не знаю внутреннюю структуру этих пиксельных буферов.

В будущем я хотел бы взять 4 средних пикселя и усреднить их для более точного определения цвета, но сейчас я просто хотел бы получить представление о том, как это работает.

10
задан fish2000 14 June 2017 в 00:07
поделиться