0

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

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

如何检测背景颜色?

4

4 回答 4

1

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

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

于 2012-05-01T22:34:58.217 回答
1

您应该尝试使用 GetPixel 函数,您可以在此处找到一些文档:

GetPixel Function

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

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

只需检查您的值以了解它是否为白色。

于 2012-05-01T22:40:57.757 回答
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)
    }
}
于 2012-05-01T22:50:47.057 回答
0

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

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

于 2012-05-01T22:34:15.037 回答