jpg 画像の背景色の検出に関するヘルプが必要です。
ソース ディレクトリに多数の画像があり、ASP.NET アプリでそれらを 1 つずつ読み取り、背景が白かどうかを検出したいと考えています。
背景色を検出するにはどうすればよいですか?
jpg 画像の背景色の検出に関するヘルプが必要です。
ソース ディレクトリに多数の画像があり、ASP.NET アプリでそれらを 1 つずつ読み取り、背景が白かどうかを検出したいと考えています。
背景色を検出するにはどうすればよいですか?
GetPixel関数を使用してみてください。ここにいくつかのドキュメントがあります:
GetPixel関数
RGB値を取得するには、座標を選択する必要があります。
次に、多くの価値を持たせたいだけの座標で試してみることができます。
白かどうかを確認するには、値を確認してください。
境界線のピクセルを読み取るだけでは、境界線の周りにボックスがあるアイコンに対して誤解を招く結果が得られます。たとえば、答えが白であるべき場合に、LoveFilm ロゴが赤を返します。
最も繰り返される色を数えることも誤解を招く可能性があります。たとえば、MSDN のロゴの場合、背景は (境界線と同様に) 透明ですが、最も繰り返される色はおそらく濃い青になります (数えていません)。
次のようなことを試してください:
public bool IsBackgroundWhite(Bitmap theImageBitmap)
{
Bitmap bmp = new Bitmap(theImageBitmap);
int weight = 0;
for (int x=0;x<bmp.Width;x++) {
weight += GetWeight(bmp.GetPixel(x,0));
weight += GetWeight(bmp.GetPixel(x,bmp.Height-1));
}
for (int y=0;y<bmp.Height;y++) {
weight += GetWeight(bmp.GetPixel(0,y));
weight += GetWeight(bmp.GetPixel(bmp.Width-1,y));
}
if (weight > 255)
return true;
return false;
}
private int GetWeight(Color c)
{
if (c.R >= 200 && c.B >= 200 && C.G >= 200)
{
int n1 = 255 - c.R;
int n2 = 255 - c.G;
int n3 = 255 - c.B;
return (int)((n1+n2+n3) / 3)
}
}
画像の境界に近いピクセルの色が白かどうかを意味していると思います。そうでなければ、あなたの定式化はあまりにも曖昧です。
境界の周りのピクセルが白であることを確認することができます(ノイズを抑えるために、最初にスムージングを行うことを検討してください)。