我想获得一些有关检测jpg图像背景颜色的帮助。
我在源目录中有很多图像,我想在我的ASP.NET应用程序中逐个读取它们,并检测它们是否具有白色背景。
如何检测背景颜色?
答案 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)
}
}