問題タブ [gpuimage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gpuimage - カメラなしの GPUImageMovieWriter
私は GPUImage を初めて使用しますが、これは本当に素晴らしいと思います。よくやったブラッド。フィルターがとてもきれいに連鎖する方法が大好きです。
目標
私は次のことを結び付けようとしています:
* openGL シーンを作成する
* いくつかのフィルターを適用する (以下の説明とは無関係)
* ビデオに記録する
問題
私の問題は、録音を接続する方法がはっきりしないことです。残念ながら、opengl-es とやり取りしても、何をすべきかを理解するのに十分な詳細が得られません。
試み
パッケージ内の例から 2 つの出発点があります:
* CubeExample - 生の openGL を取得して GPUImage と対話する
* SimpleVideoFileFilter - フィルタを介して新しいファイルにビデオ ファイルを再コーディングする
CubeExample から始めて、GPUImageSolidColorGenerator を videoCamera フィルターに置き換えました (余談ですが、フィルターなしで開始する方法がわかりません)。これにより、メッシュを作成してレンダリングし、操作できるようになりました。次に、映画のフィルタリングと再エンコードで指定された手順に従って GPUImageMovieWriter フィルターを追加するだけでよいと考えましたが、それには GPUImageMovie (ソース) とライターの間の調整が必要です。ソースとしてカメラ ストリームやビデオ ファイルではなく、アニメーション化された openGL シーケンスが必要なため、その方法が明確ではありません。私はvideoInputReadCallback
movieWriterに追加しようとしました:
wherenextFrame
は次のフレームを作成し、完了したら呼び出しendProcessing
、CMTime を設定します。呼び出しがなければ、newFrameReadyAtTime:atIndex:
フレームが 1 つしかないビデオを作成することを除いて、正常に動作します (画面に期待どおりにレンダリングされたアニメーション イメージ)。newFrameReadyAtTime:atIndex:
電話で、メッセージを受け取ります
これは、movieWriter がまだレンダラーにフレームを表示する準備ができていないと思わせますが、どうすればよいかわかりません。私は他の多くのことを試しましたが、役に立ちませんでした。Interacting with OpenGL-ES (上記のリンクを参照) の説明からすると、簡単なように思えますが、うまくいきません。
REQUEST
質問を他の人にとってより関連性のあるものにするために、誰かがopenGLシーン(三角形など)を作成し、それをGPUImageMovieWriterに接続してファイルに記録する例を投稿できれば幸いです。おそらく三角形を回転させて10 フレームなので、静止画以上のものが作成されていることがわかります。
ありがとう。
ios - OpenGL ES 2.0 平面モーフ/歪み効果 GPUImage iOS
すばらしい GPUImage フレームワークで少し遊んで、フラグメント シェーダーで「凸」のような効果を再現することができました。
ただし、GPUImage またはその他の OpenGL レンダリングをテクスチャに使用して、3D でより複雑な平面曲線を作成できるかどうか疑問に思っています。
私が到達しようとしている効果は、このようなものです。深度バッファーと頂点シェーダーを使用して同様のものを得る可能性はありますか?または、Z 座標をエミュレートするより洗練されたフラグメント シェーダーを開発する必要がありますか?
これは、フラグメントシェーダーと定期的なバルジングのみを使用して取得したものです
ありがとう
もう1つの考えは、3Dモデリングアプリで曲面のプロトタイプを作成し、何らかの方法でテクスチャをそれにマッピングすることは可能でしょうか?
ios - GPUImage:さまざまなフィルターを画像に適用し、それらを縮小して結果を出力画像に並べて表示する方法
GPUImageライブラリは初めてです。
私はそれを使ってカメラからフレームを取得し、それらをリアルタイムでフィルタリングしています。開発中のフィルターに異なるフィルターパラメーターを使用しています。
さまざまなフィルターと並行してカメラ画像をフィルター処理する方法を理解しましたが、ここで実行したいのは、4つのフィルター処理された画像を並べて大きな出力画像を作成する結果画像を出力することです。
私の考えでは、GPUImageTransformFilter
インスタンスとGPUImageAddBlendFilter
インスタンスをチェーンして、合成されたイメージを取得できます。たとえば、2つの画像を縮小して並べるという最も単純なケースでは、次のようになります。
ただし、これにより、両方の画像が互いに拡大縮小およびオーバーレイされ、結果は画像の端に変換され、残りの半分は空になります。
小さい画像を拡大縮小して並べて表示し、1つの大きな画像を作成する方法についてのアドバイスをいただければ幸いです。
どうもありがとう!
iphone - UIViewを透過するGPUImageビデオ
AV-Outを使用して2番目の画面の1280x720ウィンドウにコンテンツを表示するiOSプロジェクトに取り組んでいます。
私はMPMoviePlayerController
背景としてのビューを持っており、その上にとのような他のさまざまな要素がUIImages
ありUILabels
ます。バックグラウンドムービーがループ再生されます。
次に、表示されているすべての要素を含むビュー全体を、透明度のある別のフルスクリーンアニメーションでオーバーレイして、下にあるビューの一部のみが表示されるようにします。
私は最初に。でpngアニメーションを試しましたUIImageView
。私はそれが実際にiPhone5で動作することを知って驚いたが、もちろんpngはサイズが非常に大きいので、これはあまりにも多くのRAMを使用し、iPhone4sより下のすべてでクラッシュする。だから私は別の方法が必要です。
AVFoundationを使用して2番目の映画を同時に再生する方法を理解しました。ここまでは順調ですね。これでオーバーレイビデオを再生できますが、もちろんまだ透明ではありません。
GPUImage
また、ライブラリを使用GPUImageChromaKeyBlendFilter
すると、ビデオから色をフィルタリングして透明にし、別のビデオと組み合わせることができることも学びました。
私がまだ理解していないことは、私の場合、私が望む結果を得るためにそれを実装するための最良の方法です。
トップビデオの下のビュー階層全体をの最初の入力として使用しGPUImageChromaKeyBlendFilter
、グリーンスクリーンスタイルのビデオを2番目の入力として使用して、結果を720pでライブで表示できますか?どうすればいいですか?
またはGPUImageChromaKeyFilter
、グリーンスクリーンスタイルのビデオを使用してフィルタリングし、他のすべてのビューよりも上のビューで再生する方がよいでしょうか。それでは、このビデオの背景は透明になりますか?
ご協力いただきありがとうございます!
ios - GPUImage グリーンスクリーン
GPUImage を使用してグリーン スクリーン エフェクトを実行しようとしています。私が達成しようとしている効果は、カーテンが開くムービーを再生し、ムービーの白い部分を画像に置き換えることです。これによりカーテンが表示され、カーテンが開いて画像が表示されます。
ムービーが正しく表示され、ムービーの白い部分が黒く表示されますが、カーテンが開いたときに画像が表示されません。誰かが以下のコードを見て、私が間違っていることを教えてもらえますか?
前もって感謝します。グレッグ
ios - GPUImage フィルターを UIView に適用する
問題があります。のようなフィルターPixelate or Blur
を全体に適用する必要がありますUIView
。eBay iPad
アプリのように。
使おうと思ったのGPUImage
ですが、やり方がわかりません。?GPUImageView
を渡さずに直接フィルターを適用する方法があります。UIImage
主な問題はUIView
、 3 番目に大きなスクリーンショットを作成するのにコストがかかりすぎることです (グラブiPad
に 2 秒)。UIWindow
したがって、完璧な解決策は、eBay アプリと同じように、フィルターをビューに直接適用することですが、..どのように?
ありがとうございます!
ios - GPUImage メモリの警告
画像に GPUImage フィルターを適用しているときに奇妙な問題に直面しています。画像にさまざまなフィルターを適用しようとしていますが、10 ~ 15 個のフィルターを適用すると、メモリ警告が表示されてクラッシュします。コードは次のとおりです。
誰かが同じ問題を経験した場合は、提案してください。ありがとう
objective-c - GPUImage を使用してソース画像 (静止画像) の特定の座標に小さなテクスチャをブレンドする方法
私は GPUImage ライブラリを使用しており、静止画像の特定の座標に小さなロゴまたはテキストを配置したいと考えています。
GPUImageSourceOverBlendFilter を使用してみました。2 番目の画像をソース画像にブレンドしますが、デフォルトではソース画像の中央に配置されます。
どうすればこれを達成できるか、誰かがアイデアを共有できますか?
ios - GPUImageおよびOpenGLESの複数のシングルチャネル出力
画像処理にGPUImageライブラリを使用しようとしています(画面への画像出力ではありません)。デフォルトでは、ライブラリは1つのBGRAテクスチャを出力します。代わりに、複数のシングルチャネル/シングルバイトテクスチャを出力したいと思います。この時点まで、私はBGRAの各ピクセルに対して複数の計算をビットパッキングしてきました。このような方法の限界に達したのは、a)各ピクセルに対して4を超える戻り値があり、b)BGRA-BGRA-BGRA-BGRA.....をBBBBにインターレース解除するオーバーヘッドがあるためです。 GGGG ..、RRRR ..、AAAA ..は、私のプログラムを本当に行き詰まらせ始めています。
GPUImageで複数の入力テクスチャを使用するためのサンプルコードがあることは知っていますが、複数の出力テクスチャについては何も見ていません。シングルバイト出力の場合、GL_ALPHAテクスチャ(?)を使用できると思うので、フィルターカーネルで複数のテクスチャを変数にバインドすることが問題だと思います。
ありがとう!
ios - iOS のフラグメント シェーダで texture2D を介してメモリ リークが発生していますか?
私は Brad Larson による GPUImage ライブラリを使用していますが、興味深い問題を発見したと思います。
次のシェーダー プログラムは問題なく実行されます。
ただし、このバージョンは大きな画像 (つまり、カメラからの 4x3 画像を最長辺 2560 にサイズ変更) でクラッシュします。私の考えでは、大きく異なるのは texture2D 呼び出しのセットだけです。
このフィルターを実行してから、最小値を持つ 2 番目のフィルターを実行しています (つまり、形態学的膨張と浸食、または形態学的クローズ オペレーター)。
これを実装するためのより最適な方法は、頂点シェーダーを介してすべての texture2D 呼び出しを独自の場所に取得することです。ただし、半径が 10 の場合、314 個の頂点が必要になり、許可されている場所の数を超えてしまいます。これらをシミュレーターで実行し、他のすべてが等しい場合、最初のコードは問題なく終了しますが、2 番目のコードはメモリを爆発させ、浸食フィルターの呼び出しのためにメモリが劇的に増加します。iPhone 4s で実行すると、最初のコード フラグメントは問題なく (そしてもちろん非常に迅速に) 終了しますが、2 番目のコード フラグメントは拡張後にクラッシュし、侵食呼び出しを実行しません。
最初は、texture2D がリークしているように見えます。ただし、これらの関数はスレッドで呼び出されています。スレッドが終了すると、シミュレータですべてのメモリがクリアされます。その結果、関数は、最初に正しく機能する場合、問題なく複数回実行できます。
だから私の質問はこれです:この動作を引き起こす可能性のある texture2D 呼び出しは何ですか? 呼び出し間のスレッドの終了とは無関係に、フィルターが完了したら、作成されたバッファーをフラッシュする方法はありますか?
編集: この質問を投稿してから 1 週間で学んだこと: 問題は for ループ自体にあります。for ループを削除すると、メモリの問題はなくなります。あれは、
ループ内で何かが起こっているかのように多くのメモリを割り当てます。シミュレーターのインスペクターでこの動作を決定しています。1280x1280 の画像で for ループを使用せずにシェーダーを実行すると、合計 202 MB が割り当てられ、for ループを使用して実行すると、for ループ内で何が起こっても、230 MB が割り当てられます。while ループでも同じ動作が発生します。