C# 怎么匹配图片?
如题。
有两张图片,一张大图,一张小图,其中小图是大图的某个部分
我想找到小图在大图中的坐标。
请教各位高手怎么实现
[解决办法]
代码没测试,你试试看行不行
public Point GetFirstLocation(string strBigFile, string strSmallFile)
{
Bitmap bmpBig = new Bitmap(Image.FromFile(strBigFile));
Bitmap bmpSmall = new Bitmap(Image.FromFile(strSmallFile));
Color[,] clrSmall = new Color[bmpSmall.Width, bmpSmall.Height];
for (int i = 0; i < bmpSmall.Width; i++)
{
for (int j = 0; j < bmpSmall.Height; j++)
clrSmall[i, j] = bmpSmall.GetPixel(i, j);
}
bool bFlag = false; //是否找到标记
Point pt=new Point(-1,-1); //返回找到的起始点
for (int i = 0; i < bmpBig.Width - bmpSmall.Width; i++)
{
for (int j = 0; j < bmpBig.Height - bmpSmall.Height; j++)
{
if (bmpBig.GetPixel(i, j) == clrSmall[0, 0])
{
bFlag = true; //找到起始点
pt = new Point(i, j);
for (int x = i; x < i + bmpSmall.Width; x++)
{
for (int y = j; y < j + bmpSmall.Height; y++)
{
if (bmpBig.GetPixel(x, y) != clrSmall[x - i, y - j])
{
bFlag = false; //找到的起始点不符合
break;
}
}
if (!bFlag)
break;
}
}
}
}
if (bFlag)
return pt; //找到起始点
else
return new Point(-1, -1); //没找到
}
{
flag=true;
break;
}
}
}
[解决办法]
色差就是把 R G B上下有些许浮动而已。 例如取会的 RGB(255,0,0)红色 RGB(240-255,0-10,0-10)都可以的.
这个是我猜的哦,
[解决办法]
这个算法有多种,给你两种:1,直方图匹配,将小图在大图上面平移,计算小图和相应位置大图的直方图,然后计算直方图误差,当误差足够小时,即寻找到当前位置;2,最小均方误差法,这个网上都有,你搜一下就明白了,很简单的原理,考虑到要编辑公式,所以这里就省略了。。。关于图像匹配这些算法效率都是个问题,如果图像过大,那么匹配算法需要进一步优化。