Tôi có một chương trình xem đầu vào máy ảnh trong thời gian thực và nhận được giá trị màu của pixel giữa. Tôi sử dụng một captureOutput: Phương pháp để lấy CMSampleBuffer từ một đầu ra AVCaptureSession (mà xảy ra để được đọc như một CVPixelBuffer) và sau đó tôi lấy các giá trị rgb của một điểm ảnh bằng cách sử dụng đoạn mã sau:Lấy dữ liệu mong muốn từ Tham chiếu 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)];
tôi mặc dù công thức ((chiều rộng * chiều cao) * 4)/2 sẽ cho tôi điểm ảnh giữa, nhưng nó mang lại cho tôi điểm ảnh giữa trên cùng của hình ảnh. Tôi tự hỏi tôi sẽ cần sử dụng công thức nào để truy cập pixel ở giữa màn hình. Tôi bị kẹt vì tôi không thực sự biết cấu trúc bên trong của các bộ đệm pixel này.
Trong tương lai, tôi muốn lấy 4 pixel giữa và trung bình chúng để đọc màu chính xác hơn, nhưng bây giờ tôi chỉ muốn có ý tưởng về cách những thứ này hoạt động.
Vâng, phương hướng mặc định cho hai máy ảnh trên các thiết bị iOS là cảnh quan, vì vậy nếu bạn đang làm bất cứ công việc chân dung-mode bạn' sẽ cần phải đối phó với một khung xoay. –
@Codo có lời khuyên nào không? http://stackoverflow.com/questions/37611593/how-to-create-cvpixelbufferref-with-yuv420i420-data –
Tò mò, tại sao phần chiều rộng được nhân với 4? – OutOnAWeekend