2016-09-18 19 views
1

画像の白い背景を削除して別の画像として保存したいと思います。 背景を抽出するコードを書きましたが、ピクセル値の一部が残っています。 チェックアウト元画像:enter image description here画像の白い背景を削除するには - java

チェックアウトは、画像をトリミング:enter image description here

それはまだ白い背景のいくつかの量を残します。

これも削除したいと思います。

 int x1=0; 
    int y1=0; 
    boolean res = false; 
    System.out.println("in formatImage"); 

// Widhtの取り外し...

for (int y = 0; y <= h-1; y++) { 
    System.out.println("Y = "+y); 
    for (int x = 0; x <= x1-1; x++) { 
     System.out.println("("+x+","+y+") : "+b21.getRGB(x, y)); 
     if (!new Color(b21.getRGB(x, y)).equals(Color.WHITE)) { 
      res = true; 
     } 
     if (res) { 
      for (int p = 0; p <= x1-1; p++) { 
       b31.setRGB(p,y1,new Color(b21.getRGB(p, y)).getRGB()); 

      } 
      y1++; 
      res = false; 
      break; 
     } 
    } 
} 
b31=new BufferedImage(x1,y1,BufferedImage.TYPE_INT_RGB); 
int ty=y1; 
y1=0; 
for (int y = 0; y <= h-1; y++) { 
    for (int x = 0; x <= x1-1; x++) { 
     if (!new Color(b21.getRGB(x, y)).equals(Color.WHITE)) { 
      res = true; 
     } 
     if (res) { 
      for (int p = 0; p <= x1-1; p++) { 
       b31.setRGB(p,y1,new Color(b21.getRGB(p, y)).getRGB()); 
      } 
      y1++; 
      res = false; 
      break; 
     } 
    } 
} 

B31は、最終的なイメージを持っている

for (int x = 0; x <= w-1; x++) { 
      for (int y = 0; y <= h-1; y++) { 
       if(new Color(bi1.getRGB(x, y)).getRGB()==-1) 
       {res=false;} 
       else if (!new Color(bi1.getRGB(x, y)).equals(Color.WHITE)) { 
        res = true; 
       } 
       if (res) { 
        for (int p = y; p <= h-1; p++) { 
         b21.setRGB(x1,p,new Color(bi1.getRGB(x, p)).getRGB());       
        } 
        x1++; 
        res = false; 
        break; 
       } 
      } 
     } 
     b21=new BufferedImage(x1,h,BufferedImage.TYPE_INT_RGB); 
     x1=0; 
     for (int x = 0; x <= w-1; x++) { 
      for (int y = 0; y <= h-1; y++) { 
       if(new Color(bi1.getRGB(x, y)).getRGB()==-1) 
       {res=false;} 
       else if (!new Color(bi1.getRGB(x, y)).equals(Color.WHITE)) { 
        res = true; 
       } 
       if (res) { 
        for (int p = 0; p <= h-1; p++) { 
         b21.setRGB(x1,p,new Color(bi1.getRGB(x, p)).getRGB()); 
        } 
        x1++; 
        res = false; 
        break; 
       } 
      } 
     } 

//身長の除去:

は、ここに私のコードです。

+0

「白い背景を削除する」とはどういう意味ですか?あなたは本当に***画像をトリミングする***を求めていますか?それはあなたのコードがしているようです。何が効いていないのですか?白い背景のどの部分が削除されていないのですか?あなたの質問は不明です。 –

+0

近くの手の背景が削除されていません。画像をダウンロードして確認することもできます –

答えて

1

ジムが言ったように、 身体の色は純粋な白ではありません。 コード&の次のステートメントを修正すると、あなたのためにうまくいくでしょう。

if (new Color(b21.getRGB(x, y)).getRGB()<-1000000) 

により、コマンドライン

if (!new Color(b21.getRGB(x, y)).equals(Color.WHITE)) 

次置き換え これは、あなたが望む出力が得られます。 白の色合いを変えることができます&グレーは-1000000から-2000000まで

2

適切な画像エディタで画像を調べると、モデルの頭、左手、右の肘付近のピクセルが純粋な白(0xFFFFFF)ではないことがわかります。

enter image description here

あなたはすべての3つのチャネル上の最大強度から若干のずれを許可するようにアルゴリズムを調整する必要があります。どのくらいの余裕を許すかはあなた次第です。

関連する問題