2017-05-05 11 views
0

1つのビットマップから別々のビットマップに分割する必要があります。
色を並べ替える作業システムがあります。
だから私は1色のすべての種類のビットマップのリストを持っています。
そして、私には要件があります。私はあらゆる種類の形状検出自由を使用したくありません。
現在のところ、ビットマップ内のすべてのピクセルをループし、そのピクセルが古いか新しいシェイプの一部である可能性があると判断する色があるかどうかを確認する単純なループしかありません。
layeredColorSystem =ビットマップ
この
C#抽象形検出

変数リストは、色選別システムの結果です。

foreach (Color colorLayer in layeredColorSystem.Keys) 
      { 
       Bitmap layer = layeredColorSystem[colorLayer]; 
       Bitmap shape = new Bitmap(input.Width, input.Height); 
       for (int x = 0; x < layer.Width; x++) 
       { 
        for (int y = 0; y < layer.Height; y++) 
        { 
         Color currentPixel = layer.GetPixel(x, y); 
         if (!currentPixel.Equals(colorLayer)) 
         { 
          //no color here maybe a new shape can come up 
         } else 
         { 
          //color here maybe a part of an old shape maby a new shape. 

         } 
        } 
       } 
      } 


だから私の質問は:どのように私は、形状を検出し、簡単なコードを書くと、ビットマップにorigionalビットマップの同じサイズを各sepperate形状を置けばいいの?
ありがとうございます!

+0

質問はありません!!! –

+0

@JeremyThompson質問は、一種のビットマップのすべてのシェイプをセパレートビットマップにどのように置くのかが分かりやすいです。 –

+0

2つの最後の票は、あなたが何を求めているのか不明であることを示しています...いずれにしても、これはあなたを助けるかもしれません:http://stackoverflow.com/questions/7782338/search-for-shapes-in-bmp-image-file –

答えて

2

flood-fillアルゴリズムを実装して、特定の色のパッチ内のすべてのピクセルを検索します。次に、その情報を他のビットマップにコピーします。ピクセルを別のビットマップに「移動」したら、移動したピクセルを追跡して、同じピクセルを再処理しないようにします。

実際の形状(三角形や円など)を決定したい場合は、ルールを作成する必要がありますが、基本的に、画像から各「オブジェクト」を抽出する必要がありますそれを処理することができます。

その他のメカニズムにはエッジ検出が含まれている可能性がありますが、色の変化を「エッジ」として使用しているように見えます。

+0

私は確かに色の変化を使用します。色のソートされたビットマップにエッジを貼り付けるだけでなく、シェイプの内側に貼り付けるだけです。 –

+0

フラッドフィルアルゴリズムを使用すると、全体の形状(「内側」ピクセルを含む)がコピーされます。エッジを取得したいだけの場合は、flood-fillによって生成された結果のシェイプに対してエッジ検出アルゴリズムを実行し、エッジのみを使用します。いずれのアプローチも、境界ボックスに含まれるが形状に含まれないピクセルを含む。 – AndrewP

+0

これは確かに動作します応答のありがとう! :) –

関連する問題