2012-03-11 1 views
0

私は、コンピュータビジョンアプリケーションで良好な非結合アーキテクチャを実践しようとしています。私はネイティブのOpenCVルーチンをラップする.netライブラリ(EMGU.CV)を使用しているので、EMGUクラスを抽象化して将来それらを代用できるようにするには、C#インターフェイスを使用する必要があります。インターフェイスの後ろにカスタムライブラリを配置するC#

具体的な例は次のとおりです。EMGUで

私はImage<T,T>クラスを公開フォアグラウンド検出器のクラスを、持っています。この呼び出しはまったくEMGU指向です。

私は自分のアプリケーションのためにIBackgroundDetectorに取り組んでいます。これはEMGUを含むさまざまなバックグラウンドディテクタをサポートしていると思われます。

は、だから私のインタフェースにメソッドの

interface IBackgroundDetector 
{ 
    SomeGeneralImageType GetCurrentBackgroundFrame(SomeGeneralImage CameraFrame); 
} 

にはどうすればいいのアーキテクチャを取得するには、このSomeGeneralImageTypeクラスの作成について行くのですか?

+1

実際に*別の実装を選択するまで、これを行わないでください。あなたはちょうどそれなしでそれを推測するだろう。 –

答えて

0

考えられるのは、ISomeGeneralImageTypeという名前のインターフェイスを作成することです。
あなたのイメージのために必要となるメソッドの束を宣言したばかりのインターフェイスISomeGeneralImageTypeを継承して実装作成した各画像のタイプについて次に

(あなたはおそらく必要があるだろう何のための例として、C#のImageを見て)メソッド。

これを行う方法は、カプセル化を使用して通常行う複雑な作業をすべて隠すことです。

interface ISomeGeneralImageType 
{ 
    void SetHeight(int height); 
    Byte[] GetBitBuffer(); 
} 

class ImageEMGU : ISomeGeneralImageType 
{ 
    private Image<T,T> innerImage; 

    public override Byte[] GetBitBuffer() 
    { 
     innerImage.GetMeSomeBits() 
    } 

    public override SetHeight(int height) 
    { 
     innerImage.EMGUHight(height); 
    } 
} 

は、その後、あなたのインターフェイスを実装する任意の画像の上にあなたの背景検出器を使用することができます。

例えば(私は本当にあなたのオブジェクトの実際のインタフェースを知りませんが、これはアイデアを表示するだけです) :

interface IBackgroundDetector 
{ 
    SomeGeneralImageType GetCurrentBackgroundFrame(ISomeGeneralImage CameraFrame); 
} 
関連する問題