2010-12-07 4 views

答えて

2

トミーはあなたがライブカメラのフレームをキャプチャするためのiOS 4.0でAVFoundationを使用したいと思う、と述べたものに展開します。しかし、OpenGLを直接使用して画像処理を行うことをお勧めします。そうしなければ、現在のハードウェアでリアルタイム結果を得ることができなくなるからです。

OpenGL ES 1.1デバイスでは、AppleのGLImageProcessingサンプルアプリケーションをベースとして(その中にOpenGLグレースケールフィルタがあります)、それを通してライブビデオフレームを実行してみます。

OpenGL ES 2.0では、プログラマブルシェーダを使用してこの効果を得ることができます。 this sample applicationのシェイダーを使ってさまざまなフィルターを使ってライブiPhoneカメラのデータを処理する方法を示し、その動作についての書き込みを hereにします。

私のベンチマークでは、iPhone 4はプログラム可能なシェーダーで60 FPSでこの処理を行うことができますが、これを行うにはCPUバウンドコードに頼っているだけです。

私は上記を書いて以来、この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 3GS、iPhone 4、iPad、または第3世代または第4世代iPod touchが必要)をサポートしていません。したがって、リンク先のサンプルはデバイス上では実行されません。そこからカメラ読み取りコードを抽出し、GLImageProcessingの例のOpenGL ES 1.1処理ルーチンと組み合わせる必要があります。 –

5

iOS 4.0を使用する必要があります。これにより、カメラを起動し、準備ができた時点でフレームを生データとして受信できます。必要に応じてフレームを処理して、好きなように画面に表示することができます。

hereにログインした後、WWDCセッション409(「AV Foundationでカメラを使用する」)を取得することをお勧めします.UIImagePickerControllerで独自のバリアントを作成できるようにする必要があります。

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-Plane(Luma)データを取得します。これはわずか8ビットです。データの25%をアップロードしますBGRAを使用する場合は、OpenGLESのテクスチャ。 RGB-> YUV変換を行う必要はありません。また、BlendingやShaderの効果を必要とせずに、OpenGLES 1.1と2.0の両方で動作します。

関連する問題