检测图像的背景颜色
我想你的意思是如果接近图像边界的像素的颜色是白色的。 否则你的配方太模糊。
您可以检查这一点,周围的边框的像素是白色的(你可以考虑首先做一些平滑淬火噪声)
你可以让我知道如何做到这一点? – thatsmeuc
你不能只是读边界像素,将给予图标的误导结果在边界附近有一个盒子,例如当答案应该是白色时,LoveFilm徽标将返回红色。计数最重复的颜色也会引起误解,例如在MSDN徽标的情况下,背景是透明的(边框),但最重复的颜色可能是深蓝色(我没有计数)。
也许蓝色是背景色,而你的大脑只是不能解释正确的图像:)(+1) –
jpeg不能透明,即使它不是白色,也是透明的:) –
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)
}
}
可以读取图像中的每个像素,并检查其颜色更重复......不是最好的,但可能解决您的问题 – ivowiblo
同上@ivowiblo,虽然它是可能只是为了读取边缘像素。 –