iPhoneカメラからライブフレームを取得し、グレースケールに変換して、アプリケーションの画面に表示するにはどうすればよいですか?iPhoneカメラのライブビデオフィードをグレースケールに変換するにはどうすればよいですか?
答えて
トミーはあなたがライブカメラのフレームをキャプチャするための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の例を見て、これをライブビデオフィードにどのように適用し、ディスクに記録するかを見てください。
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)
(同じソースから)
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange( '420v')を使用して、Y-Plane(Luma)データを取得します。これはわずか8ビットです。データの25%をアップロードしますBGRAを使用する場合は、OpenGLESのテクスチャ。 RGB-> YUV変換を行う必要はありません。また、BlendingやShaderの効果を必要とせずに、OpenGLES 1.1と2.0の両方で動作します。
- 1. ワールド座標をカメラ座標に変換するにはどうすればよいですか?
- 2. OpenGLではどのように画像をグレースケールに変換しますか?
- 3. iphoneカメラの自動フラッシュ機能を無効にするにはどうすればよいですか?
- 4. iPhoneでNSMutableDataをNSStringに変換するにはどうすればよいですか?
- 5. wchar_t *をwstringに変換するにはどうすればよいですか?
- 6. オーディオをテキストに変換するにはどうすればよいですか?
- 7. ソフトウェアアプリケーションをソフトウェアアプライアンスに変換するにはどうすればよいですか?
- 8. JSONArrayをJSONObjectに変換するにはどうすればよいですか?
- 9. byte []をBitmapに変換するにはどうすればよいですか?
- 10. SqlXmlをXmlTextに変換するにはどうすればよいですか?
- 11. LFをCRLFに変換するにはどうすればよいですか?
- 12. ハッシュタグテキストをハッシュタグハイパーリンクに変換するにはどうすればよいですか?
- 13. UTCをDateTimeに変換するにはどうすればよいですか?
- 14. string []をArrayListに変換するにはどうすればよいですか?
- 15. NSStringをNSDateに変換するにはどうすればよいですか?
- 16. Lucene.Net:MultiFiledQueryParserをBooleanQueryに変換するにはどうすればよいですか?
- 17. System.TypeをUriに変換するにはどうすればよいですか?
- 18. バイトをmbに変換するにはどうすればよいですか?
- 19. StringReaderをStringに変換するにはどうすればよいですか?
- 20. 'System.Windows.Media.Imaging.BitmapImage'を 'System.Drawing.Image'に変換するにはどうすればよいですか?
- 21. NSStringをNSDataに変換するにはどうすればよいですか?
- 22. TBytesをRawByteStringに変換するにはどうすればよいですか?
- 23. CodeVariableDeclarationStatementをCodeAssignmentStatementに変換するにはどうすればよいですか?
- 24. intをNSStringに変換するにはどうすればよいですか?
- 25. log4j.xmlをlogback.xmlに変換するにはどうすればよいですか?
- 26. FBProfilePictureViewをUIImageに変換するにはどうすればよいですか?
- 27. intをbyteに変換するにはどうすればよいですか?
- 28. IntPtrをストリームに変換するにはどうすればよいですか?
- 29. * charを_TCHARに変換するにはどうすればよいですか?
- 30. SYS_GUID()をvarcharに変換するにはどうすればよいですか?
こんにちは、お返事ありがとうございます。 私はiPhone 3Gでsdk 4.0用に開発しています。 例を実行しようとすると、SIGABRTが表示されます... 4.0 SDKを使用しているのですか? – Safari
@GgSalent - iPhone 3GのGPUは、OpenGL ES 2.0(iPhone 3GS、iPhone 4、iPad、または第3世代または第4世代iPod touchが必要)をサポートしていません。したがって、リンク先のサンプルはデバイス上では実行されません。そこからカメラ読み取りコードを抽出し、GLImageProcessingの例のOpenGL ES 1.1処理ルーチンと組み合わせる必要があります。 –