0

カメラ信号で画像処理を行う独自の CIFilter カーネルを作成しました。引数 1 は「inputImage」(現在のカメラ画像)、引数 2 は「backgroundImage」で、最初のカメラ画像で初期化されます。

フィルターは再帰的に機能するはずです。フィルタの結果は、次の反復で新しい「backgroundImage」として使用する必要があります。背景画像といくつかの差異を計算しているため、前のレンダリングの結果が必要です。

残念ながら、次の繰り返しでは CIFilter の出力 CIImage を使用できません。これは、メモリの負荷がどんどん高くなるためです。10 秒の処理の後、RAM の使用量は 1.4GB になります。標準的な方法 (再帰なし) でフィルターを使用すると、メモリ管理に問題はありません。

次の反復でフィルターの出力を入力として再利用するにはどうすればよいですか? 結果の画像で NSLog を実行しました。アリが教えてくれた

background {

CISampler:0x1002e0360 image {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
   FEPromise: 0x1013aa230 extent [0 0 1280 720]; DOD [0 0 1280 720]; filter MyFeatureDetectFilter: 0x101388dd0; kernel coreImageKernel; image {

CISampler:0x10139e200 image {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
   FEBufferImage: 0x10139bee0 metadata.colorspace: HDTV; extent: [0 0 1280 720]; format: BGRA_8; uid 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
}

数秒後、ログは sth になります。お気に入り

                            }                                                                                                                                                            
                         }                                                                                                                                                     
                       }                                                                                                                                                                                 
                     }                                                                                                                                                    
                   }                                                                                                                                                       

これは、CIImages が目的の操作の「常に」プロトタイプであることを示しています。そして、それらを再帰的に使用すると、新しい「プロトタイプ」への入力として「結果の CIImage 'プロトタイプ'」だけが追加されます。時間が経つにつれて、レンダリングの「ルール」は爆発し、ネストされたプロトタイプの巨大な構造になります。

CIImages を強制的にメモリ内の構造を平坦化する方法はありますか? 再帰的な処理ができれば、QuartzCore のパワーを極限までぶち壊してしまうので嬉しいです。

QuartzComposerでも同じことを試しました。出力を入力に接続すると機能しますが、多くのメモリも必要です。しばらくするとクラッシュします。次に、QC のキューを使用しようとしましたが、すべて正常に機能しました。QC キューに相当する「xcode」とは何ですか? または、カーネルを書き直して、次の反復のために「結果」をメモリに保持するメカニズムはありますか?

4

1 に答える 1

2

あなたが探しているのはCIImageAccumulator classのようです。これにより、フィルターの出力を次の反復で入力として使用できます。

編集:

使用方法の例については、この Apple サンプル コードを参照してください。

于 2014-08-04T21:28:06.393 に答える