5

Androidカメラを使ってクロマキーエフェクトを作りたいです。手順を追う必要はありませんが、Android カメラをハイジャックしてフィルターを適用する最良の方法を知りたいです。私は API を調べましたが、カメラからのデータを操作する方法について非常に決定的なものは見つかりませんでした。最初は表面テクスチャの使用を検討しましたが、それがどのように役立つか、または使用する方法さえ完全にはわかりません。次に、GLSurfaceView を使用してチェックアウトしました。これは正しい方向かもしれませんが、よくわかりません。

また、私の質問に追加するために、画像のプレビューと保存の両方をどのように処理しますか? 画像を最低でも 2 回処理しますか? プレビュー中に1回、保存中に1回?おそらくそれが最善の解決策だと思います。

最後に、処理を処理して速度を最適化する C/++ ラッパーを作成することは理にかなっていますか?

どんな助けでも大歓迎です。いくつかの例へのリンクも大歓迎です。

ありがとう。

4

3 に答える 3

6

唯一の可能性は、openGL ES とフラグメント シェーダーを使用して (少なくとも openGL ES 2.0 が必要です)、GPU でクロマ キー効果を実行することです。シェーダー自体は非常に簡単です (google)。

ただし、そのためには、コールバックでカメラ プレビューを表示する必要があります。を実装しCamera.PreviewCallback、画像データ用のバッファを作成してsetPreviewCallbackWithBufferメソッドを使用する必要があります。同様の質問に対する私の回答から基本的な考え方を得ることができます。このカスタム カメラ プレビューのパフォーマンスには重大な問題がありますが、ES 2.0 をサポートするハードウェアで動作する可能性があります。

openGL でプレビューを表示するには、 を拡張GLSurfaceViewして実装する必要がありますGLSurfaceView.Renderer。次に、カメラ プレビュー フレームをテクスチャとしてglTexImage2Dいくつかの単純な長方形にバインドし、残りはシェーダーによって処理されます。ES でシェーダーを使用する方法については、こちらを参照してください。シェーダーの経験がない場合は、このチュートリアルから始めるとよいでしょう。

もう 1 つの質問: プレビューから現在の画像を保存することはできますが、プレビューは撮影した写真よりも解像度が低いため、おそらく写真を撮影してから個別に処理する必要があります (同じシェーダーを使用できます)。 .

C++に関しては、疑わしい出力を伴う多くの追加作業です。しかし、正しく行えばパフォーマンスを向上させることができます。この記事を確認してみてください。同様のトピックにあり、NDK を使用してカメラのプレビューを処理し、openGL で表示する方法について説明しています。しかし、C++ でクロマ キー エフェクトを実行することを考えていた場合、シェーダーよりも大幅に遅くなります。

于 2013-04-16T00:02:21.597 に答える
2

Google コードにはクロマ キー プロジェクトがあります: http://code.google.com/p/chroma-key-project/クロマ キーを使用してトークンである画像をアップロードする方法が含まれています。

オンラインで徹底的に検索した結果、Android デバイス用のクロマ キーイングで動作するオープン ソース プロジェクトを見つけることができませんでした。このプロジェクトの目的は、便利なクロマキー ライブラリを提供することです。これにより、グリーンまたはブルー スクリーンの前で写真を撮影し、選択した背景に写真を適用できるアプリケーションやゲームを簡単に実装できます。>さらに、このアプリケーションでは、ユーザーが Intent を使用して写真をアップロードすることもできます。

于 2013-04-18T11:24:47.267 に答える