检测图像的背景颜色

问题描述:

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

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

如何检测背景颜色?

+1

可以读取图像中的每个像素,并检查其颜色更重复......不是最好的,但可能解决您的问题 – ivowiblo

+0

同上@ivowiblo,虽然它是可能只是为了读取边缘像素。 –

我想你的意思是如果接近图像边界的像素的颜色是白色的。 否则你的配方太模糊。

您可以检查这一点,周围的边框的像素是白色的(你可以考虑首先做一些平滑淬火噪声)

+0

你可以让我知道如何做到这一点? – thatsmeuc

你不能只是读边界像素,将给予图标的误导结果在边界附近有一个盒子,例如当答案应该是白色时,LoveFilm徽标将返回红色。计数最重复的颜色也会引起误解,例如在MSDN徽标的情况下,背景是透明的(边框),但最重复的颜色可能是深蓝色(我没有计数)。

+0

也许蓝色是背景色,而你的大脑只是不能解释正确的图像:)(+1) –

+0

jpeg不能透明,即使它不是白色,也是透明的:) –

+0

Aye,JPEGs没有alpha信息,它们只是图像的例子,尽管大多数人会知道(或者很容易找到)这些图像支持了我的观点,即一条规则可能不适合所有场景。 – joocer

你应该尝试使用与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) 
    } 
} 
+0

这段代码是否贯穿图像上的所有像素?会不会包含图片及其背景?我只想检查背景..所以这个代码工作在所有图像上..你能帮忙吗? – thatsmeuc

+0

@nehaaggarwal - 编号此代码仅通过图像的边界运行。第一个'for'循环遍历顶部和底部边界,第二个'for'循环遍历左右边界。此外,此代码使用“加权”值,这意味着如果边框为白色或者其中一个边框由于阴影而完全不是白色,例如它仍会注册为白色边框。 – Icemanind

+0

@thatsmeuc:你为什么试图编辑这个帖子并删除icemanind的代码?那是不对的。 –