У меня есть программа, которая просматривает вход камеры в реальном времени и получает значение цвета среднего пикселя. Я использую captureOutput: метод, чтобы захватить CMSampleBuffer с выходом AVCaptureSession (что случается быть прочитано как CVPixelBuffer), а затем я захватить значение RGB пиксела, используя следующий код:Получение желаемых данных из ссылки CVPixelBuffer
// 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 средних пикселя и усреднить их для более точного считывания цвета, но сейчас я хотел бы получить представление о том, как это работает.
Да, ориентации по умолчанию для двух камер на IOS устройствах пейзажа, так что если вы делаете какую-либо портретный режим работы вы» придется иметь дело с вращающейся рамкой. –
@Codo любой совет? http://stackoverflow.com/questions/37611593/how-to-create-cvpixelbufferref-with-yuv420i420-data –
Любопытно, почему часть ширины умножается на 4? – OutOnAWeekend