2012-06-02 17 views
9

Jestem świadomy funkcji AVFoundation i jej obsługi przechwytywania (niezbyt znajome). Jednak nie widzę żadnego łatwo dostępnego API, aby uzyskać dane piksel po pikselu (RGB na piksel lub podobne). Pamiętam, że czytałem w dokumentach, że jest to możliwe, ale tak naprawdę nie wiem jak. A więc:iOS: Uzyskaj dane piksel po pikserze z kamery

  1. Czy to można zrobić? Jeśli tak to jak?
  2. Czy otrzymam surowe dane obrazu lub dane skompresowane JPEG?

Odpowiedz

31

AV Foundation może przekazać surowe bajty dla obrazu przechwyconego przez wideo lub aparat fotograficzny. Konieczne jest skonfigurowanie AVCaptureSession za pomocą odpowiedniego urządzenia AVCaptureDevice i odpowiedniego AVCaptureDeviceInput i AVCaptureDeviceOutput (AVCaptureVideoDataOutput lub AVCaptureStillImageOutput). Apple ma kilka przykładów tego procesu w swojej dokumentacji i wymaga konfiguracji jakiegoś standardowego kodu.

Po skonfigurowaniu sesji przechwytywania i przechwytywaniu danych z aparatu konfiguruje się metodę delegata -captureOutput:didOutputSampleBuffer:fromConnection:, w której jednym z parametrów będzie CMSampleBufferRef. To będzie mieć CVImageBufferRef w tym, że masz dostęp przez CMSampleBufferGetImageBuffer(). Zastosowanie tego bufora pikseli zwróci bazowy adres tablicy bajtów dla surowych danych pikseli reprezentujących ramkę kamery. Może to być kilka różnych formatów, ale najczęściej są to BGRA i planarne YUV.

Mam przykładową aplikację, która korzysta z tego here, ale polecam również przyjrzeć się my open source framework, która otacza standardową płytę podstawową AV Foundation i ułatwia przetwarzanie obrazu na GPU. W zależności od tego, co chcesz zrobić z tymi nieprzetworzonymi bajtami kamery, mogę już mieć coś, co możesz tam użyć, lub sposób na wykonanie go znacznie szybciej niż przy przetwarzaniu w CPU.

+3

końcu się do tego ... kod zostanie zaksięgowana tutaj naprawdę pomogło choć: http://stackoverflow.com/a/11615472/472768 Dzięki! – FeifanZ

+0

Czy mógłbyś wyjaśnić, co powinienem podać w tym przypadku na wejściu tej funkcji? 'Wykrywa AlprResults (unsigned char * pixelData, int bytesPerPixel, int imgWidth, int imgHeight, std :: vector regionsOfInterest);" Rozumiem tylko punkt o "pixelData" i "regionsOfInterest". –

+0

@SashaKid - Nie mam pojęcia, co ta funkcja ma, a to brzmi jak całkowicie odrębne pytanie. –

-4
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate); 
float luminance = dot(textureColor.rgb, W); 

mediump vec2 p = textureCoordinate; 
if (p.x == 0.2 && p.x<0.6 && p.y > 0.4 && p.y<0.6) { 
    gl_FragColor = vec4(textureColor.r * 1.0, textureColor.g * 1.0, textureColor.b * 1.0, textureColor.a); 
} else { 
    gl_FragColor = vec4(textureColor.r * 0.0, textureColor.g * 0.0, textureColor.b * 0.0, textureColor.a *0.0); 
} 
Powiązane problemy