我想获得一些关于检测 jpg 图像的背景颜色的帮助。
我在源目录中有很多图像,我想在我的 ASP.NET 应用程序中逐个读取它们,并检测它们是否具有白色背景。
如何检测背景颜色?
我想获得一些关于检测 jpg 图像的背景颜色的帮助。
我在源目录中有很多图像,我想在我的 ASP.NET 应用程序中逐个读取它们,并检测它们是否具有白色背景。
如何检测背景颜色?
您不能只读取边框像素,这会给边框周围有框的图标带来误导性结果,例如,当答案应该是白色时,LoveFilm 徽标会返回红色。
计算重复次数最多的颜色也会产生误导,例如,在 MSDN 徽标的情况下,背景是透明的(边框也是如此),但重复次数最多的颜色可能是深蓝色(我没有计算过)。
您应该尝试使用 GetPixel 函数,您可以在此处找到一些文档:
GetPixel Function
您只需选择坐标即可获得 RGB 值。
然后,您可以尝试使用尽可能多的坐标来获得很多价值。
只需检查您的值以了解它是否为白色。
尝试这样的事情:
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)
}
}
我猜您的意思是靠近图像边框的像素的颜色是否为白色。否则你的表述太模糊了。
你可以检查一下,边界周围的像素是白色的(你可以考虑先做一些平滑来消除噪音)