2010-12-07 3 views

답변

2

토미, 당신은 라이브 카메라 프레임을 캡처하는 아이폰 OS 4.0에서 AVFoundation을 사용하는 것이 좋습니다 말에 확장합니다. 그러나 OpenGL을 사용하면 이미지 처리를 직접 수행하는 것이 좋습니다. 그렇지 않으면 현재 하드웨어에서 실시간 결과를 얻을 수 없기 때문입니다.

OpenGL ES 1.1 장치의 경우, Apple의 GLImageProcessing 샘플 응용 프로그램을 기본 응용 프로그램 (OpenGL 그레이 스케일 필터가 있음)에서 사용하고이를 통해 라이브 비디오 프레임을 실행합니다.

OpenGL ES 2.0의 경우 프로그래밍 가능한 셰이더를 사용하여이 효과를 얻을 수 있습니다. 나는 다양한 필터를 통해 라이브 iPhone 카메라 데이터를 처리하는 방법을 보여줍니다. this sample application 셰이더를 사용하여 작동 방식에 대한 글을 참고하십시오. here.

내 벤치 마크에서 iPhone 4는 프로그래밍 가능한 쉐이더를 사용하여 60 FPS에서이 처리를 수행 할 수 있지만이를 수행하기 위해 CPU 바인딩 된 코드에 의존하는 경우 약 4 FPS 만 얻습니다.

나는 위와 같이 작성 했으므로 이제이 OpenGL ES 2.0 비디오 처리를 캡슐화 한 an open source framework을 만들었으며이 용도로 사용할 수있는 내장 된 그레이 스케일 필터가 있습니다. 비디오 소스에 적용된 GPUImageGrayscaleFilter를 사용하여 흑백으로 빠르게 변환하거나 GPUImageSaturationFilter를 사용하여이 비디오를 제어 된 양만큼 선택적으로 채도 감소시킬 수 있습니다. SimpleVideoFilter 예제를 살펴보고 라이브 비디오 피드에이를 적용한 다음 디스크에 기록하는 방법을 확인하십시오.

+0

안녕하세요, 귀하의 답변에 감사드립니다. 하지만 당신이 나에게 준 예제를 시도 할 때 문제가있다. 나는 iPhone 3G와 SDK 4.0을 개발 중이다. 예제를 실행하려고 할 때 SIGABRT가 표시됩니다 ... 4.0 SDK를 사용하고 있기 때문에 사용할까요? – Safari

+0

@GgSalent - iPhone 3G의 GPU는 OpenGL ES 2.0 (iPhone 3G S, iPhone 4, iPad 또는 3 세대 또는 4 세대 iPod touch가 필요함)을 지원하지 않습니다. 따라서 링크 된 샘플은 기기에서 실행되지 않습니다. 거기에서 카메라 판독 코드를 추출하여 GLImageProcessing 예제의 OpenGL ES 1.1 처리 루틴과 결합해야합니다. –

5

iOS 4.0을 사용해야합니다. iOS 4.0을 사용하면 마침내 카메라를 시작하고 프레임을 준비 할 때 원시 데이터로 수신 할 수 있습니다. 원하는대로 프레임을 처리하고 원하는대로 화면에 표시 할 수 있습니다. 할

가장 좋은 것은 멀리 UIImagePickerController를에 자신의 변형을 생성 할 수있는 등 당신을 얻을해야하는, here 로그인 한 후 ("AV 재단에서 카메라 사용하기") WWDC 세션 (409)를 잡아 것입니다.

brightness = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16; 

YUV 변환 공식에 표준 RGB에서 온다, described here 등 :

이 밝기에 RGB로 변환하려면, 당신은 아마 빠른 공식을합니다. 이미지를 화면에 표시하는 방식에 따라 다음 값을 직접 저장할 수 있습니다 (예 : OpenGL로 이동하는 경우 - 휘도 텍스처로 업로드하는 경우). 또는 R, G 및 B를

으로 저장합니다.
1.164(brightness - 16) 

(동일한 소스에서)

3

kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange ('420v')를 사용하고 Y- 평면 (루마) 데이터 (8 비트 만 사용)를 사용하는 대신 모든 유형의 데이터를 업로드 할 수 있습니다. BGRA를 사용한다면 OpenGLES의 텍스처. 어떤 종류의 RGB-> YUV 변환도 필요 없으며 블렌딩이나 쉐이더 효과를 필요로하지 않고 OpenGLES 1.1과 2.0에서 모두 작동합니다.

관련 문제