2012-06-02 6 views
9

저는 AVFoundation과 캡처 지원을 알고 있습니다. 그러나 픽셀 단위 데이터 (픽셀 당 RGB 등)를 얻는 데 즉시 액세스 할 수있는 API는 없습니다. 나는 이것이 가능한 문서를 읽은 것을 기억하지만 실제로 어떻게 보이지는 않습니다. 따라서 :iOS : 카메라에서 픽셀 단위로 데이터 가져 오기

  1. 이 작업을 수행 할 수 있습니까? 그렇다면 어떻게?
  2. 원본 이미지 데이터 또는 JPEG 압축 된 데이터를 가져오고 싶습니까?

답변

31

AV Foundation은 비디오 또는 스틸 카메라로 캡처 한 이미지의 원시 바이트를 다시 제공 할 수 있습니다. 적절한 AVCaptureDevice와 해당 AVCaptureDeviceInput 및 AVCaptureDeviceOutput (AVCaptureVideoDataOutput 또는 AVCaptureStillImageOutput)을 사용하여 AVCaptureSession을 설정해야합니다. Apple은 자신의 문서에서이 프로세스의 몇 가지 예를 다루고 있으며 구성하기 위해 일부 상용구 코드가 필요합니다.

캡처 세션을 구성하고 카메라에서 데이터를 캡처하는 경우 -captureOutput:didOutputSampleBuffer:fromConnection: 대리자 메서드를 설정합니다. 여기서 매개 변수 중 하나는 CMSampleBufferRef가됩니다. 그 안에는 CMSampleBufferGetImageBuffer()을 통해 액세스하는 CVImageBufferRef가 있습니다. 해당 픽셀 버퍼에 CVPixelBufferGetBaseAddress()을 사용하면 카메라 프레임을 나타내는 원시 픽셀 데이터에 대한 바이트 배열의 기본 주소가 반환됩니다. 이것은 몇 가지 다른 형식이 될 수 있지만 가장 일반적인 것은 BGRA와 평면 YUV입니다.

here을 사용하는 예제 응용 프로그램이 있지만 표준 AV Foundation 표준을 포괄하는 my open source framework을 살펴보고 GPU에서 이미지 처리를 쉽게 수행 할 것을 권장합니다. 이러한 원시 카메라 바이트로 수행하려는 작업에 따라 이미 CPU에서 처리하는 것보다 훨씬 빠르게 수행 할 수있는 방법이 있습니다.

+3

마지막으로 ...이 주위에있어 당신이 여기에 게시 코드는 정말하지만 도움 : http://stackoverflow.com/a/11615472/472768 감사합니다! – FeifanZ

+0

이 함수를 입력 할 때 무엇을 제공해야하는지 설명해 주시겠습니까? 'AlprResults는 (pixelData, int bytesPerPixel, int imgWidth, int imgHeight, std :: vector regionsOfInterest)를 인식한다. '나는 pixelData와 regionsOfInterest에 대해서만 이해하고있다. –

+0

@SashaKid - 나는 그 기능이 무엇인지 모릅니다. 그리고 그것은 완전히 별개의 질문처럼 들립니다. –

-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); 
} 
관련 문제