检测图像的背景颜色

时间:2012-05-01 22:21:50

标签: c# system.drawing

我想获得一些有关检测jpg图像背景颜色的帮助。

我在源目录中有很多图像,我想在我的ASP.NET应用程序中逐个读取它们,并检测它们是否具有白色背景。

如何检测背景颜色?

4 个答案:

答案 0 :(得分:1)

你不能只读取边框像素,这会给边框周围有框的图标带来误导性结果,例如:当答案应该是白色时,LoveFilm徽标会返回红色。

计算最重复的颜色也会产生误导,例如在MSDN徽标的情况下,背景是透明的(边框也是如此),但最重复的颜色可能是深蓝色(我没有计算过) )。

答案 1 :(得分:1)

你应该尝试使用GetPixel功能,你可以在这里找到一些文档:

GetPixel Function

您只需选择坐标即可获得RGB值。

然后,您可以尝试使用尽可能多的坐标,以获得很多价值。

只需检查您的值,以便知道它是否为白色。

答案 2 :(得分:0)

我猜您的意思是靠近图像边框的像素颜色是否为白色。 否则你的表述太模糊了。

你可以检查一下,边框周围的像素是白色的(你可以考虑先做一些平滑来消除噪音)

答案 3 :(得分:0)

尝试这样的事情:

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)
    }
}