AV Foundation có thể cung cấp cho bạn các byte nguyên bản cho hình ảnh được quay bằng video hoặc máy ảnh tĩnh. Bạn cần phải thiết lập một AVCaptureSession với một AVCaptureDevice thích hợp và AVCaptureDeviceInput và AVCaptureDeviceOutput tương ứng (AVCaptureVideoDataOutput hoặc AVCaptureStillImageOutput). Apple có một số ví dụ về quá trình này trong tài liệu của họ, và nó đòi hỏi một số mã boilerplate để cấu hình.
Khi bạn đã định cấu hình phiên chụp và bạn đang thu thập dữ liệu từ máy ảnh, bạn sẽ thiết lập phương thức ủy quyền -captureOutput:didOutputSampleBuffer:fromConnection:
, trong đó một trong các tham số sẽ là CMSampleBufferRef. Điều đó sẽ có một CVImageBufferRef bên trong nó mà bạn truy cập thông qua CMSampleBufferGetImageBuffer()
. Sử dụng CVPixelBufferGetBaseAddress()
trên bộ đệm pixel đó sẽ trả lại địa chỉ cơ sở của mảng byte cho dữ liệu pixel thô đại diện cho khung máy ảnh của bạn. Điều này có thể ở một vài định dạng khác nhau, nhưng phổ biến nhất là BGRA và YUV phẳng.
Tôi có một ứng dụng ví dụ sử dụng here này, nhưng tôi khuyên bạn cũng nên xem my open source framework kết thúc tiêu chuẩn AV Foundation boilerplate và giúp dễ dàng thực hiện xử lý hình ảnh trên GPU. Tùy thuộc vào những gì bạn muốn làm với các byte máy ảnh thô, tôi có thể đã có một cái gì đó bạn có thể sử dụng ở đó hoặc một phương tiện làm nó nhanh hơn nhiều so với chế biến trên CPU.
Nguồn
2012-06-02 19:20:47
Cuối cùng có xung quanh để này ... mã bạn được đăng ở đây thực sự giúp mặc dù: http://stackoverflow.com/a/11615472/472768 Cảm ơn! – FeifanZ
Bạn có thể giải thích những gì tôi nên cung cấp trong trường hợp đó trong đầu vào của chức năng này? 'AlprResults nhận ra (unsigned char * pixelData, int bytesPerPixel, int imgWidth, int imgHeight, std :: vector regionsOfInterest);' Tôi hiểu điểm chỉ về 'pixelData' và' regionsOfInterest'. –
@SashaKid - Tôi không biết chức năng đó hoạt động như thế nào và âm thanh đó giống như một câu hỏi hoàn toàn riêng biệt. –